我正在尝试创建一个未使用/未选定对象的新列表,以便我可以在模板中显示使用的内容和未使用的内容。
我的模特:
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
任何人都能看到我做错了什么?
答案 0 :(得分:0)
你所做的事情根本没有任何意义。您无法在Profile类本身上访问benefits.all()
,只能访问它的实例。 Profile.benefits.all()
甚至意味着什么?
即使这确实有效,也会给你一份福利清单。你怎么能用它来通过pk排除个人资料?然后,第三,该Profile查询如何帮助您获得未使用的权益列表?
如果您只想获取没有附加配置文件的福利列表,那么您实际上需要查询福利模型,而不是配置文件:
unused_benefits = Benefits.objects.filter(profile__isnull=True)