Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用django ORM构建具有两个左连接的SQL查询_Django_Orm_Left Join - Fatal编程技术网

如何使用django ORM构建具有两个左连接的SQL查询

如何使用django ORM构建具有两个左连接的SQL查询,django,orm,left-join,Django,Orm,Left Join,我需要构建一个MySQL查询,我想首先尝试使用django ORM,然后使用raw作为最后手段 我找到了关于单联接或两个表之间联接的文档,但没有关于三个表之间联接的示例或至少是简单(初学者)的解释 models.py的内容是 from django.db import models # Create your models here. class Threads(models.Model): name = models.CharField(max_length=100) aut

我需要构建一个MySQL查询,我想首先尝试使用django ORM,然后使用raw作为最后手段

我找到了关于单联接或两个表之间联接的文档,但没有关于三个表之间联接的示例或至少是简单(初学者)的解释

models.py的内容是

from django.db import models

# Create your models here.
class Threads(models.Model):
    name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    date = models.DateTimeField("date published")
    slug = models.SlugField()

    def __unicode__(self):
        return self.name

class Posts(models.Model):
    name = models.CharField(max_length=100)
    text = models.TextField()
    author = models.CharField(max_length=100)
    date = models.DateTimeField("date published")
    slug = models.SlugField()

    def __unicode__(self):
        return self.name

class Relations(models.Model):
    thread = models.ForeignKey(Threads, related_name = "%(app_label)s_%(class)s_related")
    post = models.ForeignKey(Posts, related_name = "%(app_label)s_%(class)s_related")
这是我试图构建的原始SQL查询

SELECT forum_threads.id AS t_id, forum_threads.name AS t_name, forum_threads.slug AS t_slug, forum_posts.*
FROM forum_threads
LEFT JOIN forum_relations ON forum_threads.id=forum_relations.thread_id
LEFT JOIN forum_posts ON forum_relations.post_id=forum_posts.id
WHERE forum_threads.slug="<slug_name>"
GROUP BY forum_threads.id
第一个查询是从slug中检索线程id,第二个查询返回该线程id上和线程相关的所有post

我将尝试使用M2M部件,因为我至少有一个工作示例。

为什么不使用关系,如果需要,可以使用

然后你就可以通过slug得到一条线

thread = Threads.objects.get(slug=slug_name)
然后,您可以通过访问与线程相关的帖子

thread.posts_set.all()

好啊尝试了这种方法,它也可以工作,而不是使用thread.posts\u set.all(),我使用了thread.posts.all()。谢谢你的帮助。
thread.posts_set.all()