gpt4 book ai didi

django - 序列化外键的外键(DRF)

转载 作者:行者123 更新时间:2023-12-02 00:55:34 26 4
gpt4 key购买 nike

我有 3 个级别的模型:
Question Session(包含一堆问题),问答。
它们都通过外键连接:

class QuestionSession(models.Model):
name = models.CharField(max_length=100)

class Question(models.Model):
description = models.CharField(max_length=400)
question_type = models.CharField(max_length=50)
answers = models.PositiveIntegerField(default=0)
answers_to_close = models.PositiveIntegerField(default=3)
answered = models.BooleanField(default=False)
choices = models.CharField(
max_length=1000, blank=True, null=True, default=None)

question_session = models.ForeignKey(
QuestionSession,
on_delete=models.CASCADE,
related_name='questions',
blank=True,
null=True,
default=None
)

class Answer(models.Model):
question = models.ForeignKey(
Question,
related_name='answers_list',
on_delete=models.CASCADE)
answer = models.CharField(max_length=500)
created_at = models.DateTimeField(auto_now_add=True)

还有我的 serializers.py:
class QuestionSessionSerializer(serializers.ModelSerializer):
project = ProjectSerializer()

class Meta:
model = QuestionSession
fields = [
'id',
'questions',
'project'
]


class QuestionSerializer(serializers.ModelSerializer):
question_session = QuestionSessionSerializer()

class Meta:
model = Question
fields = [
'id',
'description',
'question_type',
'created_at',
'answers',
'answers_to_close',
'answered',
'question_session',
'choices',
'answers_list'
]


class AnswerSerializer(serializers.ModelSerializer):
question = QuestionSerializer()

class Meta:
model = Answer
fields = [
'question',
'answer',
'created_at'
]

我可以轻松地从 QuestionSession 获取问题对象:

QuestionSession.objects.get(pk=1).questions.all()



我还可以通过以下方式获得答案:

QuestionSession.objects.get(pk=1).questions.objects.get(pk=1).answers_list.all()



但是当我通过 Response 发送这些数据时,它只发送答案的 ID 而不是对象。我的看法:
    def get(self, request, **kwargs):
"""Fetch a single session"""

session_id = kwargs['session_id']

questions = QuestionSerializer(
QuestionSession.objects.get(
pk=session_id).questions.filter(answered=False),
many=True
)

return Response({
'session': session_id, 'questions': questions.data
})

如何修改我的序列化程序以传递 Answer 对象而不仅仅是 id?

最佳答案

您是否尝试过指定嵌套 深度在你的序列化器上?:

class QuestionSerializer(serializers.ModelSerializer):
question_session = QuestionSessionSerializer()

class Meta:
model = Question
fields = [
'id',
'description',
'question_type',
'created_at',
'answers',
'answers_to_close',
'answered',
'question_session',
'choices',
'answers_list'
]
depth = 1

关于django - 序列化外键的外键(DRF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54542491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com