2015-08-20 67 views
2

我有以下型號,其中B與A中的許多一對一的關係:當我使用上的一個一個QuerySetDjango的查詢集排除空的外鍵設置

class A(model.Model): 

    name = models.IntegerField() 

class B(models.Model 

    a = models.ForeignKey(A, db_column='a_id') 

,是有辦法排除A中沒有B行的行?

回答

14

使用isnull

A.objects.filter(b__isnull=False).distinct() 

使用distinct()防止重複條目,否則每個a爲每個鏈接到它b出現一次。

+1

非常好...每天學點新東西... – Incognos

1
no_rows_in_b = B.objects.all().select_related('a') 

將讓你所有B與A的

然後你就可以通過他們的輸出循環A的

如果你想不重複:

no_rows_in_b = B.objects.all().distinct('a').select_related('a') 

然後:

for rec in no_rows_in_b: 
    print(rec.a) 
0

請注意,如果你想更明確的,你可以做這樣的事情:

A.objects.exclude(b__isnull=True).distinct() 

使用exclude代替filter和使用True布爾ARG。