2012-04-22 96 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')