我正在面向使用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,因爲它期望模型類中的「對象」。有什麼方法可以緩解它嗎?另外讓我知道,如果我做錯了什麼或有更好的方式做。此外,請在您的答案中指明它,以便它可以被提高。 –