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モデルの 2 つのバージョンを 1 つに結合したいと考えています。現在、どちらか一方を使用できますが、両方を使用することはできません。任意のヒント?

違いがある場合はviews.py、 に、ユーザーがアクセスできるすべてのオブジェクトを取得するコード行があります。

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

おそらく、両方のエントリ マネージャを保持し、2 つの異なるビューを作成する必要があります。1 つは個々のオブジェクト用で、もう 1 つはグループ オブジェクト用です。ただし、それはあまり DRY ではありません。

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 に答える