python - 使用序列化程序在restframework中进行API调用的Django一对多关系
问题描述
我有两个模型,它们是问题和与该问题一致的一组选择。我想结合这两个模型来创建一个 API,显示一个问题列表和他们的选择。
这些是我的模型:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
def __str__(self):
return self.question_text
class Choice(models.Model):
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return self.choice_text
这些是我的序列化程序
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ('question_text',)
class ChoiceSerializer(serializers.ModelSerializer):
class Meta:
model = Choice
fields = ('choice_text','question',)
class QuestionWithAnswer(serializers.ModelSerializer):
question = QuestionSerializer(many=True)
class Meta:
model = Choice
fields = ('question',)
这是视图类
@api_view(['GET', 'POST', ])
def getquestionWithChoices(request):
question = Question.objects.all()
serializer = QuestionWithAnswer
return Response(serializer.data)
我尝试了很多东西,但无法获得以下输出。
[
{
"id": 1,
"question_text": "What's your name?",
"pub_date": "2019-04-13T05:27:21Z",
"choices": [
{
"id": 1,
"choice_text": "fred",
"votes": 0,
"question": 1
},
{
"id": 2,
"choice_text": "bob",
"votes": 0,
"question": 1
},
{
"id": 3,
"choice_text": "rachel",
"votes": 0,
"question": 1
}
]
},
{
"id": 2,
"question_text": "What's your age?",
"pub_date": "2019-04-13T05:27:39Z",
"choices": [
{
"id": 4,
"choice_text": "15",
"votes": 4,
"question": 2
},
{
"id": 5,
"choice_text": "16",
"votes": 2,
"question": 2
},
{
"id": 6,
"choice_text": "17",
"votes": 2,
"question": 2
}
]
}
]
解决方案
您没有正确实例化序列化器。
@api_view(['GET', 'POST', ])
def getquestionWithChoices(request):
questions = Question.objects.all()
serializer = QuestionWithAnswer(questions, many=True)
return Response(serializer.data)
并且您的序列化程序也未正确定义:
class ChoiceSerializer(serializers.ModelSerializer):
class Meta:
model = Choice
fields = ('id', 'votes', 'choice_text','question',)
class QuestionWithAnswer(serializers.ModelSerializer):
choices = ChoiceSerializer(many=True)
class Meta:
model = Question
fields = ('id', 'question_text', 'pub_date', 'choices')
推荐阅读
- powershell - 不存在的文件夹上的 PowerShell Get-ChildItem 与 -recurse 标志的行为不同
- grpc - GRPC / Proto - @io.grpc.ExperimentalApi 缺少默认值
- python - 如何解决 Get_dummies 引起的内存错误
- javascript - 通过 Google Chrome 扩展修改 DOM 输入字段不是永久性的
- python - 有没有办法用 vscode 在绘图查看器中显示交互式绘图?
- maximo - 移动应用程序的下载按钮
- c - 为什么这些类型定义得到相同的结果
- python - 重新输入重定向 URL 时获取 'spotipy.oauth2.SpotifyOauthError: Bad Request'
- java - 带 8 位数字的模幂运算
- django - 如何知道哪个用户添加了另一个用户?