gpt4 book ai didi

django - 如何在 django rest 框架中设置嵌套对象?

转载 作者:行者123 更新时间:2023-12-04 07:13:40 25 4
gpt4 key购买 nike

首先,这不是关于创建或更新嵌套对象,而只是关于设置它们。让我们使用以下示例:我有以下模型:

class Category(models.Model):
code= models.CharField(max_length=2)
name= models.CharField(max_length=100)

class Question(models.Model):
category= models.ForeignKey(Category, related_name='categories')
title = models.CharField(max_length=100)

以及以下序列化程序:
class CategorySerializer(serializers.ModelSerializer):

class Meta:
model = Category
fields = ('code', 'name')

class QuestionSerializer(serializers.ModelSerializer):
category= CategorySerializer()

class Meta:
model = Question
fields = ('category', 'title')

现在,当我 get Question ,它按预期正常工作:我按预期获得了带有类别字段的问题字段。

我的问题是什么时候我想 post Question只有 Category.code ,我不太确定如何设置/使用现有的 Category .我一直在尝试不同的方法,但都没有奏效。

如果我删除 category= CategorySerializer()QuestionSerializer我通过了 id ( pk ) 的 Category在我的请求中,比它起作用的是 Question与相关 Category 一起保存.

有什么方法可以指示如何序列化嵌套对象?

预先感谢您的任何评论/建议/解决方案。

最佳答案

我不确定,如果我得到了它。对我来说,它似乎是关于创建 Question , 对?

您可以覆盖 create QuestionSerializer的方法

class QuestionSerializer(serializers.ModelSerializer):
category= CategorySerializer()

class Meta:
model = Question
fields = ('category', 'title')

def create(self, validated_data):
category = validated_data.pop('category')
category_obj = Category.objects.get(code=category['code'])

return self.Meta.model.objects.create(category=category, **validated_date)

也许您还必须设置字段 nameCategorySerializerread_only

关于django - 如何在 django rest 框架中设置嵌套对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439779/

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