2012-04-22 87 views
0

您好我有以下類Django模型:檢索數據

Class Test1(models.Model): 
    user = models.OneToOneField(User) 
    myotherid = models.CharField(max_length=255) 

Class TestData(models.Model): 
    data = models.ForeignKey(Data) 
    test1 = models.ForeignKey(Test1) 

Class Data(models.Model): 
    title = models.CharField(max_length=255) 

我很新的Django模型而這一切,我怎麼能得到所有的測試1項與myotherid = 1234和Data.title = 「foo」 的

從本質上講,這樣做SQL:

select Test1.* from Test1 t, TestData td, Data d where t.myotherid=1234 and t.id = td.test1 and td.data = d.id and d.title = "foo" 

感謝您的幫助

+0

以防萬一:請[不要使用隱'JOIN'的符號(HTTP ://stackoverflow.com/a/44932/548696)。 – Tadeck 2012-04-22 19:31:55

回答

0

我與丹尼爾同意,你可能要考慮使用ManyToManyField

雖則回答你的問題,這裏是Django的代碼是什麼樣子與模型您提供:

Test1.objects.filter(myotherid=1234, testdata__data__title='foo') 
0

TestData類是多餘的,因爲它只是在那裏定義一個ManyToMany關係,您可以使用ManyToManyField直接在Django中執行此操作 - 中間類仍然存在,但沒有明確定義。如果您需要在關係本身上存儲額外的信息,您只需要定義它。

因此,假如您添加datas = ManyToManyField('Data')Test1類,你可以簡單地這樣做:

Test1.objects.filter(myotherid=1234, datas__title='foo')