我有以下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
值?
答案 0 :(得分:1)
事实证明错误信息是一个完整的红色鲱鱼。真正发生的事情是,模型中的unique_together
约束与序列化程序中定义的read-only
字段StringRelatedField
之间存在不兼容性。
从模型中删除unique_together
恢复了Serializer的功能。或者,您可以从Serializer中删除只读字段声明。它们看起来都不是一个合适的解决方案,因为它们需要以非常重要的方式牺牲功能。
现在似乎有一个issue open on DRF's GitHub与此问题有关,但如果这是一个按预期的 tm 工作还是实际上是一个bug,还有待观察。