У меня есть приложение для опроса, где есть опросы, вопросы и ответы на вопросы. Каждый вопрос имеет внешний ключ к опросу, к которому он принадлежит, и к каждому выбору относится внешний ключ к вопросу. Выбранный код модели для вопроса с множественным выбором показан ниже.Сериализация вложенных запросов из отношений «один-два-один»
class Survey(models.Model):
# survey attributes, not needed in the query for this question
class Question(models.Model):
survey = models.ForeignKey(Survey)
prompt = models.TextField()
class Choice(models.Model):
question = models.ForeignKey(Question)
letter = models.CharField(max_length=1)
text = models.TextField()
is_correct = models.BooleanField(default=False)
Чтобы получить все вопросы в опросе, я могу выбрать все нужные мне данные с обратной связи как таковой,
Survey.objects.get(pk=1).question_set\
.select_related('choice__text', 'choice__letter')\
.values('prompt', 'choice__text', 'choice__letter')
и Он вернется, как и ожидалось,
[{
prompt: str,
choice__text: str,
choice__letter: char,
},]
... но это будет дублировать подсказку в каждом ряду, и в идеале форматирование будет ближе к
[{
prompt: str,
choice_set: [{
letter: char,
text: str,
},]
},]
я решил аналогичную проблему, прежде чем бросая его в панду dataframe и группировка данных до сериализации, но я могу только предположить, что создатели Джанго сделал способ сделать это
Есть ли способ легко вложите эти запросы, не зацикливая каждую модель вопроса и не запросив ее выбор?