Django Rest Framework很多=错误产生错误

时间:2015-03-13 02:29:23

标签: django django-models django-rest-framework

我一直试图使用django-rest-framework解决Serializers和相关字段的问题。目前我的模型看起来像这样:

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"在序列化程序中产生此错误:

  

尝试获取字段label的值时出现AttributeError   序列化器DataPointSerializer。序列化程序字段可能已命名   错误且不匹配RelatedManager上的任何属性或键   实例。原始异常文本是:' RelatedManager'对象没有   属性'标签'。

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

我这样做是对的吗?我认为转动"很多=错误"它会在嵌套查询中获取第一条记录。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:1)

所以解决的问题是重构我的模型,并附上外键。

以下是我实施的修复:

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)

如果设置“多个=错误”,则将其移动到DataSetModel会自动加入数据模型。在Serializer对象中。

答案 1 :(得分:0)

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

当你执行返回查询集的DataPointModel.dataPoints时,它不能只返回一个实例。因此设置many=False,它不会获得列表的第一个元素。