1

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

我的组模型是这样写的:

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)

也许我应该保留两个条目管理器并编写两个不同的视图 - 一个用于单个对象,另一个用于组对象。不过那不会很干。

4

1 回答 1

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)

似乎可以解决问题。如果有更好的方法,请告诉我。

于 2012-07-23T21:22:13.000 回答