在Django中排除列表中的对象

时间:2013-10-30 10:26:01

标签: django django-related-manager

我正在尝试创建一个未使用/未选定对象的新列表,以便我可以在模板中显示使用的内容和未使用的内容。

我的模特:

class Benefit(models.Model):
    name = models.CharField(max_length=200)

class Profile(models.Model):
    benefits = models.ManyToManyField(Benefit, blank=True, null=True, related_name="used_benefit")

我的观点:

class Profile(TemplateView):
    template_name = "profile/benefits.html"

    def get_context_data(self, **kwargs):
            context = super(Profile, self).get_context_data(**kwargs)
            context['unused_benefits'] = Profile.objects.exclude(pk__in=Profile.benefits.all())
            return context

这是我没有得到的,因为我收到了这个错误:'ReverseManyRelatedObjectsDescriptor' object has no attribute 'all'

我试过没有all,但后来我收到错误'ReverseManyRelatedObjectsDescriptor' object is not itterable

任何人都能看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

你所做的事情根本没有任何意义。您无法在Profile类本身上访问benefits.all(),只能访问它的实例。 Profile.benefits.all()甚至意味着什么?

即使这确实有效,也会给你一份福利清单。你怎么能用它来通过pk排除个人资料?然后,第三,该Profile查询如何帮助您获得未使用的权益列表?

如果您只想获取没有附加配置文件的福利列表,那么您实际上需要查询福利模型,而不是配置文件:

unused_benefits = Benefits.objects.filter(profile__isnull=True)