Rah*_*rma 5 django django-rest-framework
我的模型如下:
class Question(models.Model):
content = models.CharField(
max_length=1000,
blank=False,
default='',
)
def __str__(self):
return self.content
class OptionGroup(models.Model):
question = models.ForeignKey(
'Question',
on_delete=models.CASCADE,
default='',
)
options = models.ManyToManyField('Option')
class Option(models.Model):
content = models.CharField(
max_length=1000,
blank=False,
default='',
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个 Question 序列化器,它将序列化 Question.content 和所有相关的 Option.content ,而不显示 OptionGroup 中的任何字段。我该怎么做呢?
创建一个 SerializerMethod 字段并相应地定义它:
序列化器.py
from rest_framework import serializers
from diagnosisApp.models import Question, Option
class OptionSerializer(serializers.ModelSerializer):
class Meta:
model = Option
fields = ('id', 'content')
class QuestionSerializer(serializers.ModelSerializer):
options = serializers.SerializerMethodField()
class Meta:
model = Question
fields = ('content', 'options')
def get_options(self, obj):
selected_options = Option.objects.filter(
optiongroup__question=obj).distinct()
return OptionSerializer(selected_options, many=True).data
Run Code Online (Sandbox Code Playgroud)
您可以使用嵌套序列化器来序列化相关模型,如下所示:
class OptionSerializer(serializers.ModelSerializer):
class Meta:
model = Option
fields = ('content',)
class QuestionSerializer(serializers.ModelSerializer):
options = OptionSerializer(many=True, read_only=True)
class Meta:
model = Question
fields = ('content', 'options')
Run Code Online (Sandbox Code Playgroud)
这将给出以下结果:
{
'content': 'some content', # your Question
'options': [
{'content': 'some content'}, # related Option
{'content': 'some other content'}, # related Option
...
],
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关嵌套序列化器的更多信息。
| 归档时间: |
|
| 查看次数: |
8540 次 |
| 最近记录: |