sto*_*ter 5 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)
Run Code Online (Sandbox Code Playgroud)
和以下序列化器:
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ('code', 'name')
class QuestionSerializer(serializers.ModelSerializer):
category= CategorySerializer()
class Meta:
model = Question
fields = ('category', 'title')
Run Code Online (Sandbox Code Playgroud)
现在,我在get一Question,其优良的工作如预期:我与他类领域的问题领域的预期.
我遇到的问题是当我想要post一个Question只有Category.code,我不确定如何设置/使用现有的Category.我一直在尝试不同的方式,但没有一个有效.
如果我删除category= CategorySerializer()的QuestionSerializer和我通id(pk的),Category在我的要求,是不是比工作时,Question保存与相关Category.
有没有办法表明如何序列化嵌套对象?
提前感谢您提出任何意见/建议/解决方案.
I'm not sure, if I got it. To me it seems that it is about creating Question, right?
You can overwrite the create method of 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)
Run Code Online (Sandbox Code Playgroud)
Maybe you also have to set the field name in CategorySerializer to read_only
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |