我无法理解 django-guardian 函数 get_objects_for_user 的行为。我正在分配组对象权限,但 get_objects_for_user 似乎不存在这些权限。
>>> u = User.objects.get(username='angus')
>>> u.has_perm('news.change_news', n)
True
>>> from guardian.shortcuts import get_objects_for_user
>>> get_objects_for_user(u, (u'news.change_news', ))
[]
>>> get_objects_for_user(u, ('change_news'), klass=News)
[]
但是,文档似乎很清楚:
get_objects_for_user: (user, perms, klass=None, use_groups=True, any_perm=False)
Returns queryset of objects for which a given ``user`` has *all*
permissions present at ``perms``.
我什至不知道从哪里开始调试。有什么建议么?
更新:
我的模型定义如下:
class News(models.Model):
departments = models.ManyToManyField(Department, blank=True, related_name='news', through='NewsDepartmentMembership')
research_groups = models.ManyToManyField(Group, blank=True, related_name='news', through='NewsGroupMembership')
people_involved = models.ManyToManyField(Person, blank=True, related_name='news')
related_news = models.ManyToManyField('News', blank=True)
title = models.CharField(_('Title'), max_length=255)
slug = models.SlugField(_('Slug'), unique_for_date='pub_date',)
excerpt = models.TextField(_('Excerpt'), blank=True)
content = models.TextField(_('Content'), blank=True)
is_published = models.BooleanField(_('Published'), default=False)
pub_date = models.DateTimeField(_('Publication date'), default=datetime.datetime.now)
is_feat = models.BooleanField(_('Featured'), default=False)
published = PublishedNewsManager()
objects = models.Manager()
featured = FeaturedNewsManager()