Модель Django Manager for Group не работает - возвращает пустой набор запросов - PullRequest
0 голосов
/ 30 октября 2018

Я младший разработчик. Я хочу создать менеджеров для Django Groups. Один новый и тот, который переопределит менеджер по умолчанию РЕДАКТИРОВАТЬ: Django 1.8, python 2.7.15

Мои менеджеры:

class DefaultGroupManager(models.Manager):
    def get_queryset(self):
        test_ids = Test.objects.values_list('rel_group_id', flat=True)
        return super(DefaultGroupManager, self).get_queryset().exclude(id__in=test_ids)


class AllGroupsManager(models.Manager):
    def get_queryset(self):
        return super(AllGroupsManager, self).get_queryset().exclude(rel_group__start_date__lte=datetime.now()-timedelta(days=30))

С этими менеджерами я создал что-то вроде этого:

dgm = DefaultGroupManager()
agm = AllGroupsManager()
agm.contribute_to_class(Group, 'get_all')
dgm.contribute_to_class(Group, 'objects')

И это работало. Я мог бы использовать Group.get_all.all() и новый Group.objects.all(). Взамен у меня были правильные списки объектов.

Но мой старший разработчик сказал, что я должен сделать это, создав новую модель Group, которая наследуется от Group. Итак, я сделал:

Модель моей группы:

class GroupModel(Group):
    get_all = DefaultGroupManager()
    objects = AllGroupsManager()

Но это не работает!

Когда я использую GroupModel.get_all.all() или переопределяем GroupModel.objects.all(), он возвращает пустой список [] вместо списка с множеством объектов.

Все вроде бы хорошо :(

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 30 октября 2018

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

class GroupModel(Group):
    get_all = DefaultGroupManager()
    objects = AllGroupsManager()

    class Meta:
        proxy = True
...