2012-03-11 11 views
0

私は照会したい3つのクラスがあります。私はデータベースに作業をさせたいと思います。 Userオブジェクトに対して1つのクエリを実行して、関連するすべての関連フィールドを取得することは可能でしょうか?私は自分のコードで3つのテーブルに参加することを避けようとしています。私がコード内でそれをやろうとすれば、私は3つのクラスをすべて照会し、一致を維持しながら重複を排除します。同じForeignKeyを共有するDjangoのテーブルを結合する

Query: Get all users whose name contains "William", category is "Single" and alias is "Bill". 

class ModelA(models.Model): 
    user = models.ForeignKey(User,related_name="%(class)s",null=False) 
    name = models.CharField(max_length=70) 

    def __unicode__(self): 
     return u'%s' % (self.name) 

class ModelB(models.Model): 
    user = models.ForeignKey(User,related_name="%(class)s",null=False) 
    category = models.CharField(max_length=70) 

    def __unicode__(self): 
     return u'%s' % (self.category) 

class ModelC(models.Model): 
    user = models.ForeignKey(User,related_name="%(class)s",null=False) 
    alias = models.CharField(max_length=70) 

    def __unicode__(self): 
     return u'%s' % (self.alias) 

Note: this is an example only, and I am not looking to combine all the info in a single table. 
+1

「自分のコードで3つのテーブルを結合しないようにする」と言うと、明示的に(例えば生のSQLを書くことによって)意味するのか、それとも全く意味するのですか?ジョインを持つソリューションに向かっているように聞こえるので、 ORMを介して行うことは可能であるはずです。 –

答えて

2

3つのテーブルを結合せずにこれを行うことはできません。

User.objects.filter(modela__name=u'William', modelb__category=u'Single', 
    modelc__alias=u'Bill') 
+0

これは正確な構文ですか? – un33k

+0

あなたが書いたものがすべて正確であったと仮定してください。 –

関連する問題