cor*_*ory 4 django django-serializer django-rest-framework
我正在为我的 web 应用程序开发 create() 方法,该方法使用 Django REST 框架作为后端 API。
在这种情况下,我试图创建一个新的 RECIPE,它有一个相关模型 STYLE 的外键字段...
当我尝试通过 ID 将新配方记录与现有相关对象关联时,遇到了问题。
我的序列化器看起来像这样:
class StyleSerializer(serializers.ModelSerializer):
http_method_names = ['get']
class Meta:
model = Style
exclude = ()
class RecipeSerializer(serializers.ModelSerializer):
hops = HopAdditionSerializer(many=True, read_only=True)
fermentables = FermentableAdditionSerializer(many=True, read_only=True)
style = StyleSerializer()
yeast = YeastSerializer(read_only=True)
class Meta:
model = Recipe
exclude = ()
def create(self, validated_data):
style_data = validated_data.pop('style')
style = Style.objects.get(pk=style_data.get('id'))
reipce = Recipe.objects.create(**validated_data)
recipe.style = style
recipe.save();
return recipe
Run Code Online (Sandbox Code Playgroud)
您可以看到我正在尝试为新的配方对象分配相关的样式对象。
在我对新菜谱的 POST 请求中,我包含了样式,它是所有相关属性,包括字段ID。我已经验证此信息已通过开发控制台的请求和通过终端日志的 django 视图集中发布。
但是,在我的序列化程序 create() 方法中,validated_data.pop('style') 返回的字典对象中始终缺少 ID 值。其他所有字段都存在,只是缺少 ID。
我可以使用 name 属性获取样式对象,但我不明白为什么相关样式对象的 ID 在 valid_data 中丢失,即使它存在于 POST 中。
其实我已经找到答案了...
我需要在 StyleSerializer 中包含这一行,以明确地将 ID 包含在 valid_data 中:
id = serializers.IntegerField(required=False)
Run Code Online (Sandbox Code Playgroud)
全串行器
class StyleSerializer(serializers.ModelSerializer):
http_method_names = ['get']
id = serializers.IntegerField(required=False)
class Meta:
model = Style
exclude = ()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |