为什么我的Serializer停止识别给定的所需值?

时间:2015-09-05 02:00:55

标签: django django-rest-framework

我有以下Model和Serializer:

模型

class Location(models.Model):
    company = models.ForeignKey(Company)
    title = models.CharField(max_length=100)

    class Meta:
        ordering = ['company']
        unique_together = ['company', 'title']

串行

class LocationSerializer(serializers.ModelSerializer):
    company = serializers.StringRelatedField()

    class Meta:
        model = Location

当我尝试使用Serializer创建一个新位置时:

lo = LocationSerializer(data={'title': 'test', 'company': 2})

我收到以下错误:

{'company': ['This field is required.']}

是什么给出的?我最近在模型或序列化程序中唯一改变的是向模型中添加unique_together约束。为什么Serializer现在无法识别company值?

1 个答案:

答案 0 :(得分:1)

事实证明错误信息是一个完整的红色鲱鱼。真正发生的事情是,模型中的unique_together约束与序列化程序中定义的read-only字段StringRelatedField之间存在不兼容性。

从模型中删除unique_together恢复了Serializer的功能。或者,您可以从Serializer中删除只读字段声明。它们看起来都不是一个合适的解决方案,因为它们需要以非常重要的方式牺牲功能。

现在似乎有一个issue open on DRF's GitHub与此问题有关,但如果这是一个按预期的 tm 工作还是实际上是一个bug,还有待观察。