我的模型:
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
不匹配,我在我的 Serializer 中添加了 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' )
但结果是 BAD REQUEST 错误:
{"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')
最佳答案
您可以使用 model_to_dict 方法如下:
from django.forms.models import model_to_dict
model_to_dict(obj)
关于django - 序列化程序 ForeignKey 结果为 "Expected a dictionary ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475309/