过滤查询集以获取空的相关集

时间:2014-03-09 11:06:46

标签: django django-forms

我想获得一个QuerySet(提供一个ModelChoiceField),列出相关集合上有一个空的ForeignKey的所有对象。

我模型的示例摘录:

class Bankcard(models.Model):
    name = models.CharField(max_length=128)
    number = models.IntegerField()
    ...

class Person(models.Model):
    bankcard = models.ForeignKey(Bankcard, blank=True, null=True)
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    ...

在表格中,我想列出尚未与某人挂钩的所有银行卡。

我尝试的是将自己的过滤作为列表的一部分:

bankcards = Bankcard.objects.all()
unbound_cards = []
for card in bankcards:
    if len(card.person_set.all()) == 0:
        unbound_cards.append(card)

...但是这不起作用,因为我需要向ModelChoiceField提供QuerySet而不是列表,我得到'list' object has no attribute 'all'

所以我尝试直接在相关集上过滤:

unbound_cards = Bankcard.objects.filter(person_set__isnull = True)

这也不起作用:django.core.exceptions.FieldError: Cannot resolve keyword 'person_set' into field. Choices are: ...

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

尝试:

Bankcard.objects.filter(person__isnull=True)