我的模型:串行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) –