2012-03-11 34 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

相關問題