【发布时间】:2017-06-06 08:07:00
【问题描述】:
我在将 django 模型的自定义管理器和查询集与 django-rest 集成时遇到困难。我已经定义了一个名为“manager”的自定义管理器。但是 rest_framework 要求管理器必须在模型中作为“对象”可用。
以下是我的 django 代码:-
自定义查询集和管理器
class ActivableQuerySet(QuerySet):
def all(self, return_all=False):
if return_all:
return super(ActivableQuerySet, self).all()
else:
return self.get_active()
def get_active(self):
return super(ActivableQuerySet, self).filter(is_active=True)
@transaction.atomic
def delete(self):
for obj in list(self):
obj.delete()
class ActivableModelManager(Manager):
_queryset_class = ActivableQuerySet
def all(self, *args, **kwargs):
return self._queryset_class(self.model, using=self._db, hints=self._hints).all(*args, **kwargs)
models.py
class DictStrModelMixin(Model):
class Meta:
app_label = 'generic_models'
abstract = True
def __str__(self):
return str(model_to_dict(self))
class ActivableModel(DictStrModelMixin):
is_active = BooleanField(editable=False, null=False, default=True)
manager = ActivableModelManager()
class Meta:
abstract = True
_default_manager = "manager"
def delete(self, *tupargs, **kwargs):
pre_delete.send(sender=self.__class__, instance=self)
self.is_active = False
self.save(force_update=True)
post_delete.send(sender=self.__class__, instance=self)
类 ActiveSerializer(ModelSerializer): 元类: 模型 = ActivableModel 字段 = '全部'
现在,调用 ActiveSerializer.save() 会出现以下错误:- 类型对象“ActivableModel”没有属性“对象” 以下是rest_framework中的代码行,它给了我这个错误
为什么会这样? django 不是为所有模型提供默认管理器“对象”吗?我也尝试在 Meta 类中设置 _default_manager 选项,但它不起作用。在 django 中定义自定义管理器和查询集的正确方法是什么?
提前致谢。
【问题讨论】:
标签: python django django-models