繁体   English   中英

将列重命名为queryset的Django JOIN

[英]Django JOIN with column renaming to queryset

我正在尝试使用联接和列重命名来构建我的Django查询集。 不幸的是,我的两个字段具有相同的名称,因此queryset不会像我期望的那样返回值。

我的模型是这样的:

class Question(models.Model):
     text = models.CharField('Text', max_length=200, unique=True)

class UserQuestionnaire(models.Model):
     creation = models.DateField('creation date')

class UserChoice(models.Model):
     question = models.ForeignKey(Question)
     questionnaire = models.ForeignKey(UserQuestionnaire)
     text = models.CharField('Text', max_length=200)  # same field name
     votes = models.IntegerField(default=0)

我想要的输出查询如下:select * from polls_userchoice inner join polls_question;

它返回一个像这样的表:

+----+-------------+------------------+------+-------+----+-------+
| id | question_id | questionnaire_id | text | votes | id | text  |
+----+-------------+------------------+------+-------+----+-------+
|  1 |           1 |                3 | 2    |     0 |  1 | text1 |
|  2 |           4 |                3 | 6    |     0 |  2 | text2 |
|  3 |           3 |                3 | 6    |     0 |  3 | text3 |

我的Django queryset与

user_choice_list = UserChoice.objects.filter(
    questionnaire=user_questionnaire.id).select_related('question')

仅返回这样的字典

[{'questionnaire_id': 3L, 'votes': 0L, 'text': u'2', u'id': 1L, 'question_id': 1L},
 {'questionnaire_id': 3L, 'votes': 0L, 'text': u'6', u'id': 2L, 'question_id': 4L},
 {'questionnaire_id': 3L, 'votes': 0L, 'text': u'6', u'id': 3L, 'question_id': 3L}]

所以我的问题是,是否可以在查询过程中重命名问题模型的第二个“文本”列,以便我可以从queryset方法访问它?

您可以使用 ()代替select_related()。

user_choice_list = (UserChoice.objects
    .filter(questionnaire=user_questionnaire.id)
    .values(
        'id' , 
        'question_id' , 
        'questionnaire_id', 
        'question__text', 
        'votes', 
        'text'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM