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

时间:2016-02-16 17:57:21

标签: django serialization django-rest-framework

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

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一起保存。

有没有办法说明如何序列化嵌套对象?

提前感谢您提出任何意见/建议/解决方案。

1 个答案:

答案 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