首先,这不是关于创建或更新嵌套对象,而只是关于设置它们。让我们使用以下示例:我有以下模型:
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
的{{1}},那么它的工作正常, Category
与相关的Question
一起保存。
有没有办法说明如何序列化嵌套对象?
提前感谢您提出任何意见/建议/解决方案。
答案 0 :(得分:1)
我不确定,如果我知道的话。对我而言似乎是关于创建-1.0341666666666667
,对吗?
您可以覆盖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)
中的字段name
设置为CategorySerializer