首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解guardian.shortcuts.get_objects_for_user

理解guardian.shortcuts.get_objects_for_user
EN

Stack Overflow用户
提问于 2013-10-17 22:15:42
回答 1查看 1.4K关注 0票数 1

我很难理解django-守护者函数get_objects_for_user的行为。我正在分配组对象权限,但这些权限似乎不存在于get_objects_for_user。

代码语言:javascript
复制
>>> 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)
[]

不过,这些文档似乎相当清楚:

代码语言:javascript
复制
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``.

我甚至不知道从哪里开始调试。有什么建议吗?

更新:

我的模型定义如下:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2013-10-18 07:36:44

这样使用: news = get_objects_for_user(u,('change_news'),klass=News)

编辑:很容易找出问题所在:尝试使用guardian.shortcuts.get_perms (http://pythonhosted.org/django-guardian/api/guardian.shortcuts.html#get-perms)查看用户和对象之间的权限是否真的存在。不久前,我遇到了类似的问题,如果我没记错的话,那么这与用户对超级用户的依赖有关。尝试为用户设置is_superuser false,并查看has_perm是否仍然返回true。

此外,如果可能的话,我建议您不要在项目变得更大时使用get_objects_for_user快捷方式。当您在数据库中获得更多的对象/权限时,它的查询非常缓慢。

艾伦

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19438275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档