gpt4 book ai didi

django - 序列化程序 ForeignKey 结果为 "Expected a dictionary ..."

转载 作者:行者123 更新时间:2023-12-02 20:55:39 25 4
gpt4 key购买 nike

我的模型:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com