Модель Django Manager for Group не работает — возвращает пустой набор запросов

Я младший разработчик. Я хочу создать менеджеров для групп Django. Один новый и тот, который переопределит менеджер по умолчанию EDIT: 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(). Взамен у меня были правильные списки объектов.

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

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

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

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

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

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

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


person Adrian Kurzeja    schedule 30.10.2018    source источник


Ответы (1)


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

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

    class Meta:
        proxy = True
person Daniel Roseman    schedule 30.10.2018