味觉相关资源返回nu

2024-05-21 00:08:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表,其中有几个外键,我试图获取嵌套的资源,但是资源在进行以下调用时返回null ie

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

我回来了

^{pr2}$

如您所见,我的设备和modelnumber没有嵌套资源

我的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'

还有我的模型.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>

Tags: nameidtrueobjectsmodelsphone资源all
1条回答
网友
1楼 · 发布于 2024-05-21 00:08:54

你的评论无意中给我指出了这个解决方案:

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'

按照模型中的名称命名资源字段。在

我在自己的项目中测试了它,当resource中的字段名与模型中的字段名不同时,它返回null。在

由于null=True和{}的存在,该问题具有误导性。这使它工作正常,但不符合你的计划。我在docs中找不到解释,但在docstrings中找到了一些东西:

The ``attribute`` argument should specify what field/callable points to the related data on the instance object. Required. docstring

编辑:

这里line of code您的字段不是外键,但可以为null,这就是它没有引发任何异常的原因。在

相关问题 更多 >