2012-02-10 5 views
0

MySQLクエリを作成する必要があります。まずdjango ORMを試してから、最後の手段としてrawを使用します。djangoを使用して2つの左ジョインでSQLクエリを作成する方法ORM

が、私はJOINを単一のドキュメントを見つけたり二つのテーブル間の結合が、何の例または3つのテーブル

間の結合の少なくとも簡単な(初心者賢明な)説明はありません

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") 
です

と、これは私が

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 

「フォーラム」を構築しようとしている生のSQLクエリーでは、私のアプリ名

です

今、モデルを調整したり変更したりする必要があるかどうかわかりません。私のモデルは重要なデータを変更することはできません。

EDIT

は、すべてのあなたの答えをありがとう!

私は様々な例を使って少しずつ演奏しています。

thread = Threads.objects.filter(slug = slug) 

posts = Posts.objects.filter(forum_relations_related__thread = thread[0].id) 

最初のクエリは、スラグからのスレッドのIDを取得することで2つ目は、そのスレッドIDにスレッド化に関連するすべてのポストを返します。私はこのようにそれを得ました。

少なくとも1つの動作例があるので、私はM2M部品で試してみるつもりです。

答えて

1

M2Mの関係を使用するだけでなく、必要に応じてthroughを使用することもできます。

そうすると、あなたは

thread.posts_set.all() 
+0

OKを経由してスレッドに関連した記事にアクセスすることができスラグ

thread = Threads.objects.get(slug=slug_name) 

でスレッドを得ることができます。 ** thread.posts_set.all()**の代わりに、** thread.posts.all()**を使用しました。 ありがとうございます。 – daniyel

関連する問題