Как создать пользовательский менеджер моделей, который возвращает пользователей на основе членства в группе

#django #django-models

#django #django-модели

Вопрос:

У меня есть довольно простая модель. Он определяет лиц следующим образом:

 class ActiveTAsManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(is_active=True)

class Person(AbstractUser):
    company_id = models.IntegerField(null=True, blank=True, default=None)

    objects = models.Manager()
    active_TAs = ActiveTAsManager()
  

пользовательский менеджер моделей работает хорошо, но я хочу добавить условие, основанное на членстве в группе.

 class ActiveTAsManager(models.Manager):
    def get_queryset(self):
        phds = Group.objects.get(name="phds")
        return super().get_queryset().filter(is_active=True)
  

Это не удается, потому что класс Group не импортируется.

Мой вопрос двоякий:

  • как я могу импортировать класс Group?
  • Как я могу написать фильтр, чтобы он фильтровал на основе членства в группе?

Ответ №1:

Вам не нужно импортировать Group модель здесь,

 Person.objects.filter(groups__name='phds')  

Например:

 class ActiveTAsManager(models.Manager):
    def phd_users(self):
        return super(models.Manager, self) 
            .get_queryset() 
            .filter(groups__name='phds')

    def get_queryset(self):
        return super().get_queryset().filter(is_active=True)  

и это может быть вызвано как,

 Person.active_TAs.phd_users()