我正在面向使用django-rest的django模型的自定义管理器和查询集的集成困难。我定义了一个名为'manager'的自定义管理器。但rest_framework要求管理器必须在模型中作为“对象”使用。获取错误:在定义自定义查询集和模型时,类型对象'x'没有属性'对象'
以下是我的Django代码: -
custom queryset and manager
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中定义自定义管理器和查询集的正确方法是什么?
在此先感谢。
我不想在我的模型中拥有对象作为经理。但Django休息框架代码需要它。有什么出路吗? –
你为什么不想要它? –
我已经定义了自定义管理器和查询集。我想将自定义管理器的实例设置为对象。但是因为对象没有那么有意义,所以我想用'经理'这样的其他术语。但它不适用于django-rest,因为它期望模型类中的“对象”。有什么方法可以缓解它吗?另外让我知道,如果我做错了什么或有更好的方式做。此外,请在您的答案中指明它,以便它可以被提高。 –