2017-02-06 2 views
0

У меня есть приложение для опроса, где есть опросы, вопросы и ответы на вопросы. Каждый вопрос имеет внешний ключ к опросу, к которому он принадлежит, и к каждому выбору относится внешний ключ к вопросу. Выбранный код модели для вопроса с множественным выбором показан ниже.Сериализация вложенных запросов из отношений «один-два-один»

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 и группировка данных до сериализации, но я могу только предположить, что создатели Джанго сделал способ сделать это

Есть ли способ легко вложите эти запросы, не зацикливая каждую модель вопроса и не запросив ее выбор?

ответ

Смежные вопросы