如何在Django中表示联接查询?

如何在Django中表示联接查询?,django,database,Django,Database,我们如何在django中呈现这样的sql查询 select * from question LEFT JOIN (select * from question_solved where username = 'ashu' ) AS result on question.q_id = result.q_id 我尝试单独执行查询 q=问题\u已解决。对象。过滤器(用户名='ashu') y=Question.objects.filter(q\u q\u id=Question.q\u id)

我们如何在django中呈现这样的sql查询

select * from question LEFT JOIN (select * from question_solved where username = 'ashu'

) AS result on question.q_id = result.q_id 
我尝试单独执行查询

q=问题\u已解决。对象。过滤器(用户名='ashu')

y=Question.objects.filter(q\u q\u id=Question.q\u id)

但它给了我错误

django.core.exceptions.FieldError: Cannot resolve keyword 'q' into field. Choices are: q_answer, q_content, q_id, q_submission, q_tags, q_title, q_type
我的模型文件

from django.db import models

# Create your models here.

class Question(models.Model):
    q_id = models.CharField(primary_key=True, max_length=20)
    #q_difficulty = models.IntegerField()
    q_title = models.CharField(max_length = 200)
    q_content = models.CharField(max_length = 1000)
    q_type = models.IntegerField()
    q_answer = models.FloatField()
    q_submission = models.IntegerField()
    q_tags = models.CharField(max_length=10)


class Student(models.Model):
    username = models.CharField(primary_key=True, max_length=30)
    password = models.CharField(max_length=200)

class question_solved(models.Model):
    q_id = models.CharField(primary_key=True, max_length=20)
    username = models.CharField(max_length=30)
查询将产生如下结果

提前感谢。

您应该使用来关联模型。 据我所知,您希望通过username
ashu
解决所有问题

在模型的当前状态下,可以执行以下操作:

首先获取username
ashu
表中的
q_id
值列表。您可以使用以下方法完成此操作:

然后从
Question
表中筛选从上一次查询获得的列表中具有
q\u id
的对象

solved_questions=Question.objects.filter(q_id__in=quest)
你可以把所有的问题都说出来

如果您愿意,您可以有两个单独的查询集,一个是由“ashu
解决的问题列表,另一个不是由
ashu`解决的问题列表

unsolved_questions=Question.objects.exclude(q_id__in=quest).

发布您的模型文件呃,为什么在您的
问题
模型中的所有内容前面都加上
q\uu
?在代码审查期间,我会极力反驳这一点。实际上,我正在尝试获取所有问题,对于用户“ashu”已经解决问题的问题,将显示join column username和q_id的值,否则将显示null。请查看图片。我希望我的结果显示在图片中。我刚刚添加了图片。查询在sql shell中运行良好,但我不能在django中使用它。@Ashutshagarwal,我不明白你的意思。您是说,您想要的不是
QuerySet
(基本上是一个有序的对象集合),而是一个类似于原始值表的东西吗?若然,原因为何?您如何使用这些数据?您可能可以对
QuerySet
执行相同的操作,
QuerySet
s是对Django的ORM进行查询的基础。@Chris实际上我想检索所有问题。学生已经解决的问题我想强调一下。若我分别查询已解决和未解决的问题,然后逐个检查用户是否已完成,这将增加时间。所以我想按顺序检索所有问题,对于已经解决的问题,q_id2和username的值将不会为null。我可以用它一次显示问题。目前我只有2个问题在问题表中,2个用户在用户表中。表中有两个条目1表示用户1,另一个表示用户2。
all_questions = Question.objects.all()
unsolved_questions=Question.objects.exclude(q_id__in=quest).