2013-08-04 59 views
0

我有以下對象:如何查詢一組中的所有對象沒有在另一個對象的外鍵在Django

class Customer(models.Model): 
    name = models.CharField(max_length=128) 

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

class GroupMember(models.Model): 
    group = models.ForeignKey(Group) 
    member = models.ForeignKey(Member) 

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

我可以分配到一組與此有關的所有成員:

group_members = group.groupmember_set.all() 

所有成員的可用於特定客戶提供這樣的:

member_list = customer.members.all() 

我想創建的所有O列表f成員可用於未分配給組的客戶。類似於:

not_group_members = Member.objects.filter(?) 

如何創建此查詢?

回答

0

我能夠跟來實現:

customer.members.filter(groupmember__isnull=True) 
0

使用您當前的設置,這是不可能的,因爲成員有一個不可空的外鍵來分組。

但是,如果改成這樣:

class Member(models.Model): 
    customer = models.ForeignKey(Customer, null=True) 

然後你可以找到成員不屬於任何團體。

not_group_members = Member.objects.filter(group=None) 
+0

「會員有一個不可空的外鍵給組。「我認爲你很迷惑'顧客'和'組'。 –

0
customer.members.filter(groupmember_set__isnull=True) 

(我用members這裏是因爲你做了,即使默認的相關名稱將是member_set

+0

我改變了代碼,只使用組成員,它的工作。 – Atma

相關問題