Django Manager for Group模型不起作用-返回空的查询集

时间:2018-10-30 11:31:13

标签: python django django-managers

我是初级开发人员。我想为Django组创建管理员。一个新的将覆盖默认管理器的一个 编辑: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 :(得分:2)

如果您要定义一个新类,您肯定要使其成为Group的proxy。否则它将有自己的数据库表,如您所见,该表中没有任何数据。

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

    class Meta:
        proxy = True