2012-03-11 53 views
0

我有三个我想查询的类。我想让数据库完成这项工作。是否可以在用户对象上运行单个查询来获取所有与之匹配的相关字段?我试图避免加入我的代码中的三个表。如果我要在代码中做,我会查询所有三个类,然后在保留匹配的情况下消除重复。在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

当你说“试图避免加入我的代码中的三个表”,你​​的意思是明确地(例如通过编写原始SQL)还是根本?因为这听起来像你正在走向一个将要加入的解决方案;但应该可以通过ORM来完成。 – 2012-03-11 01:44:01

回答

2

如果不加入这三个表格,则无法做到这一点。

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

这是一个确切的语法? – un33k 2012-03-12 05:01:02

+0

应该是,假设你写的所有内容都是准确的。 – 2012-03-12 05:03:05