在Django中同时显示用户的个人和组视图

时间:2012-07-23 20:20:42

标签: django permissions views usergroups

我无法同时显示用户的个人和群组条目。

我的小组模型是这样写的:

class Group(models.Model):
    name = models.CharField(max_length=100)
    users = models.ManyToManyField(User, blank=True, null=True, related_name='entry_users')

我的参赛模特:

class Entry(models.Model):
    ###
    authorized_groups = models.ManyToManyField('Group', null=True, blank=True, related_name='entry_groups')
    objects = EntryManager()

Entry模型之前,我写了一个带有用户过滤器的条目管理器。

如果我想显示用户的个人条目,请使用以下内容:

class EntryManager(models.Manager):
     def for_user(self, user):
        return super(EntryManager, self).get_query_set().filter(creator=user)

如果我想显示用户的群组条目,请使用以下内容:

class EntryManager(models.Manager):
     def for_user(self, user):
        return super(EntryManager, self).get_query_set().filter(authorized_groups=user)

我想将EntryManager模型的两个版本合二为一。现在,我可以使用或者两种,但不能两者都使用。有什么提示吗?

如果它有所不同,在views.py中,我有一行代码可以抓取用户有权访问的所有对象:

entries = Entry.objects.for_user(request.user)

也许我应该保留两个Entry Manager并编写两个不同的视图 - 一个用于单个对象,另一个用于组对象。但这不会很干。

1 个答案:

答案 0 :(得分:0)

我保留了第一个EntryManager

class EntryManager(models.Manager):
    def for_user(self, user):
        return super(EntryManager, self).get_query_set().filter(creator=user)

写了GroupManager

GroupManager(models.Manager):
    def for_user(self, user):
        return super(EntryManager, self).get_query_set().filter(authorized_groups=user)

然后我将两者放在我的Entry模型下:

class Entry(models.Model):
    ###
    objects = EntryManager()
    grpobjects = GroupManager()

views.py我有这个:

entries = Entry.objects.for_user(request.user) | Entry.grpobjects.for_user(request.user)
似乎要做的伎俩。如果有更好的方法,请告诉我。