【问题标题】:Django Manager for Group model does not work - returns empty queryset组模型的 Django 管理器不起作用 - 返回空查询集
【发布时间】:2018-10-30 11:31:12
【问题描述】:

我是初级开发人员。我想为 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() 时,它会返回空列表[],而不是包含大量对象的列表。

一切似乎都很好:(

我将不胜感激!

【问题讨论】:

    标签: python django django-managers


    【解决方案1】:

    如果您要定义一个新类,您肯定希望将其设为 proxy 用于 Group。否则它将有自己的数据库表,正如您发现的那样,其中没有任何数据。

    class GroupModel(Group):
        get_all = DefaultGroupManager()
        objects = AllGroupsManager()
    
        class Meta:
            proxy = True
    

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多