Django Rest Framework Many=False 产生错误

Django Rest Framework Many=False producing errors

我坚持尝试使用 django-rest-framework 解决序列化程序和相关字段的问题。目前我有一个看起来像这样的模型:

class DataSetModel(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()

class DataPointModel(models.Model):
    dataSet = models.ForeignKey(DataSetModel, related_name='dataPoints')
    label = models.CharField(max_length=200)

我的序列化程序是这样的:

class DataPointSerializer(serializers.ModelSerializer):
    class Meta:
        model = DataPointModel
        fields = ('pk','label')

class DataSetSerializer(serializers.ModelSerializer):
    dataPoints = DataPointSerializer(many=True, read_only=True)

    class Meta:
        model = DataSetModel
        fields = ('pk','title')

我遇到的问题是当我尝试更改序列化程序中的 "many=False" 时产生此错误:

Got AttributeError when attempting to get a value for field label on serializer DataPointSerializer. The serializer field might be named incorrectly and not match any attribute or key on the RelatedManager instance. Original exception text was: 'RelatedManager' object has no attribute 'label'.

因为这只是一个模型对象(一对多关系),我想将结果作为单个对象与一个对象的列表进行比较。

我这样做对吗?我认为转动 "many=False" 它将获取嵌套查询中的第一条记录。

如有任何见解,我们将不胜感激。

您不能设置 many=False,因为 dataPoints 是一个相关字段,returns 一个包含实例列表的查询集,而不仅仅是一个实例。

当你DataPointModel.dataPoints returns 一个查询集时,它不能 returns 只是一个实例。所以设置many=False,它不会得到列表的第一个元素。

所以我得出的解决方案是用附加外键的位置重构我的模型。

这是我实施的修复:

class DataSetModel(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    dataPoint = models.ForeignKey(DataPointModel)

class DataPointModel(models.Model):
    label = models.CharField(max_length=200)

如果您在 Serializer 对象中设置 'many=False',将其移动到 DataSetModel 会自动加入数据模型。

如下所示编写您的 DataPointModel。然后它应该可以工作

class DataPointModel(models.Model):
    dataSet = models.OneToOneField(DataSetModel, related_name='dataPoints')
    label = models.CharField(max_length=200)