簡體   English   中英

tastypie-相關資源返回null

[英]tastypie - related resources returning null

我的表中沒有幾個外鍵,我正在嘗試獲取嵌套的資源,但是資源返回空值,即在進行以下調用時

http://localhost:8080/api/v1/testuns/?format=json

我回來

{
meta: {
    limit: 20,
    next: null,
    offset: 0,
    previous: null,
    total_count: 1
},
objects: [
     {
       phone: {
           devices: null,
           modelnumber: null,
           phone_id: "2",
           resource_uri: "/api/v1/phone/2/"
       },
       resource_uri: "/api/v1/testuns/0/",
       result: "PASS",
       score: 90,
       test_run_id: "0"
     }
   ]
}

如您所見,我的設備和型號沒有嵌套資源

我的api.py就是這樣

class DevicesResource(ModelResource):
    class Meta:
        queryset = Devices.objects.all()
        authorization = Authorization()
        resource_name = 'devices'

class ModelnumberResource(ModelResource):
    class Meta:
        queryset = Modelnumber.objects.all()
        authorization = Authorization()
        resource_name = 'modelnumber'

class PhoneResource(ModelResource):
    devices = fields.ForeignKey(DevicesResource, 'devices', full=True, null=True)
    modelnumber = fields.ForeignKey(ModelnumberResource, 'modelnumber', full=True, null=True)

    class Meta:
        queryset = Phone.objects.all()
        authorization = Authorization()
        resource_name = 'phone'

class TestunsResource(ModelResource):
    phone = fields.ForeignKey(PhoneResource, 'phone', full=True, null=True)
    class Meta:
        queryset = Testuns.objects.all()
        authorization = Authorization()
        resource_name = 'testuns'

而我的models.py是

class Devices(models.Model):
    device_id = models.AutoField(primary_key=True)
    device_name = models.CharField(max_length=135, unique=True, blank=True)
    class Meta:
        db_table = u'devices'

class Modelnumber(models.Model):
    model_number_id = models.AutoField(primary_key=True)
    model_name = models.CharField(max_length=135, unique=True, blank=True)
    class Meta:
        db_table = u'modelnumber'

class Phone(models.Model):
    phone_id = models.AutoField(primary_key=True)
    model_number = models.ForeignKey(Modelnumber)
    device = models.ForeignKey(Devices)
    class Meta:
        db_table = u'phone'

class Testuns(models.Model):
    test_run_id = models.AutoField(primary_key=True)
    score = models.IntegerField()
    phone = models.ForeignKey(Phone)
    result = models.CharField(max_length=135)

為什么我的某些嵌套資源返回null?

更新:添加mysql查詢

mysql> select * from testuns;
+-------------+-------+----------+--------+
| test_run_id | score | phone_id | result |
+-------------+-------+----------+--------+
|           0 |    90 |        2 | PASS   |
+-------------+-------+----------+--------+
1 row in set (0.00 sec)

mysql> select * from phone;
+----------+-----------------+-----------+
| phone_id | model_number_id | device_id |
+----------+-----------------+-----------+
|        2 |               1 |         1 |
+----------+-----------------+-----------+
1 row in set (0.00 sec)

mysql>

偶然地,您的評論向我指出了該解決方案:

class PhoneResource(ModelResource):
    device = fields.ForeignKey(DevicesResource, 'device', full=True, null=True)
    model_number = fields.ForeignKey(ModelnumberResource, 'model_number', full=True, null=True)

    class Meta:
        queryset = Phone.objects.all()
        authorization = Authorization()
        resource_name = 'phone'

完全按照模型中的名稱命名資源字段。

我在自己的項目中對其進行了測試,當資源中的字段名稱與模型中的字段名稱不同時,它將返回null

由於null=Trueblank=True存在,因此該問題具有誤導性。 這使其正常工作,但不符合您的計划。 我在文檔中找不到合適的答案,但在文檔字符串中找到了一些東西:

The ``attribute`` argument should specify what field/callable points to the related data on the instance object. Required. 文檔字符串

編輯:

在這里您所在字段的代碼行不是外鍵,但可以為null,這就是為什么它沒有引發任何異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM