我的模型:串行ForeignKey的结果“预期字典......”
class Font(ValidateVersionOnSaveMixin, models.Model):
id = models.UUIDField(primary_key=True, editable=True)
name = models.CharField(max_length=100, blank=False, null=False)
class Glyph(ValidateVersionOnSaveMixin, models.Model):
id = models.UUIDField(primary_key=True, editable=True)
unit = models.CharField(max_length=100, blank=False, null=False, unique=True)
font = models.ForeignKey(Font, on_delete=models.CASCADE)
我要发布以下JSON的雕文添加到已经存在的字体(具有fontId
作为ID)对象。
{
fontId: "4a14a055-3c8a-43ba-aab3-221b4244ac73"
id: "40da7a83-a204-4319-9a04-b0a544bf4440"
unit: "aaa"
}
由于存在ForeignKey的领域font
和JSON财产fontId
我加入我的串行source='font'
之间的不匹配:
class FontSerializer(serializers.ModelSerializer):
class Meta:
model = Font
fields = ('id', 'name')
class GlyphSerializer(serializers.ModelSerializer):
fontId = FontSerializer(source='font')
class Meta:
model = Glyph
fields = ('id', 'unit', 'fontId')
但结果却是一个错误请求错误:
{"fontId":{"non_field_errors":["Invalid data. Expected a dictionary, but got str."]}}
更新
下面的Serializer给了我想要的结果。
class GlyphSerializer(serializers.ModelSerializer):
fontId = serializers.PrimaryKeyRelatedField(
queryset=Font.objects.all(),
required=True,
source='font',
write_only=False
)
class Meta:
model = Glyph
fields = ('id', 'unit', 'version', 'fontId')
相关 - https://stackoverflow.com/questions/28010663/serializerclass-field-on-serializer-save-from-primary-key –
[SerializerClass字段串行器保存从主键]可能的副本(http:///stackoverflow.com/questions/28010663/serializerclass-field-on-serializer-save-from-primary-key) –