2012-01-26 43 views
0

我有這些模型在Django設置:Django - 是否可以通過Django的模型快速編碼該查詢?

class SourceBusiness(models.Model): 
    source = models.CharField(max_length=100) 
    ...(other fields) 

class ResultBusiness(models.Model): 
    sourcebusiness = models.ForeignKey(SourceBusiness) 
    ...(other fields) 

我想爲這在ResultBusiness表存在的對象不同的信號源列表。例如,對於下面的數據,

a = SourceBusiness(source="A") 
a1 = SourceBusiness(source="A") 
b = SourceBusiness(source="B") 
c = SourceBusiness(source="C") 

x = ResultBusiness(sourcebusiness=a) 
y = ResultBusiness(sourcebusiness=a1) 
z = ResultBusiness(sourcebusiness=c) 

我想找到,對於源的,A1和c存在ResultBusinesses,併爲那些SourceBusinesses來源是「A」和「C」。理想情況下,我希望一步到達[「A」,「C」]。這可能與Django的QuerySet API?

如果不是直截了當,我可以解決,只是想知道這是否可以一步完成。

編輯:只是爲了澄清,[「A」,「C」]是我想要的結果,而不是輸入。所以,不是「這ResultBusiness來自SourceBusiness與源[A,C]」,但「針對存在的所有ResultBusinesses,什麼是他們的父母SourceBusiness.source的不同可能值」

回答

3
results = SourceBusiness.objects.filter(resultbusiness__isnull=False).distinct().values_list('source', flat=True) 
+0

這是我正在尋找的邏輯,但我得到一個錯誤:FieldError:無法將關鍵字'resultbusiness'解析爲字段... SourceBusiness to ResultBusiness是一對多......我如何引用SourceBusiness中的ResultBusiness? – vasek1

+0

@ vasek1你沒有爲'sourcebusiness'字段設置'related_name'嗎? – DrTyrsa

+0

@ vasek1什麼是錯誤信息的其餘部分,'選擇是:'部分? – DrTyrsa

1
RB=ResultBusiness.objects.exclude(sourcebusiness__isnull=True).values_list('sourcebusiness__source',flat=True).distinct() 

這是一步之遙。

假設:ForeignKey的可能是null=True

+0

@ vasek1你可以試試這個。這是您可能要查找的一行參考。 (最初,誤解了你的問題)。 –

+0

是的這個作品。我不知道有關的名稱字段,但一旦我設置了查詢的工作。謝謝! – vasek1

+0

@ vasek1隨時。從你的問題中學習。 :-) –