2014-02-22 42 views
0

我已經在數據模型以下如何在Django外鍵關係中進行這種查詢?

客戶

有多個地址
有很多信用卡

鑑於信用卡紀錄,我希望能夠發現,我可以將所有地址反對。

基本上我希望能夠寫出這樣的查詢...

SELECT address.line1, address.line2, address.city, 
address.state, address.zip FROM 
addresses, creditcards 
WHERE 
addresses.custid = creditcards.custid and 
creditcard.number = 'Thenumber#' 

我是相當新的Django和我只能想到寫這樣我懷疑的WIL火100S的代碼查詢。

for acard in creditcard.objects.filter(cardno = 'thenumber#'): 
    for anaddress in Address.objects.filter(customer = acard.customer): 
     print anaddress.list_values() 

是否有不同的設計,我應該採用?我不能想到在這裏使用ManyToMany,因爲它在技術上不是很多很多?我在想這個錯嗎?

這裏是模型我腦子裏想的......

class Customer(models.Model): 
    pass 

class creditcard(models.Model): 
    customer = models.ForeignKey(Customer) 

class addresss(models.Model): 
    customer = models.ForeignKey(Customer) 
    line1 = models.CharField() 
    # etc., etc., 
+0

您可以發佈您的models.py這些模型? – schillingt

回答

3

你應該總是從你想實際查詢模型開始。在這種情況下,你需要地址,所以你應該從那裏開始。

addresses = Address.objects.filter(customer__creditcard__number = 'thenumber#') 
+0

我已添加模型。如果我明白你提出的建議是「跟進關係」,那對嗎? – vivekv

+0

是的。查詢語法中的向後關係只是模型的小寫名稱(與屬性語法中使用的'foo_set'名稱相反)。 –