У меня возникли трудности с интеграцией пользовательского менеджера и набора запросов для моделей django с django-rest. Я определил пользовательский менеджер с именем «manager». Но rest_framework требует, чтобы менеджер был доступен как «объекты» в модели.Получение ошибки: тип объекта «x» не имеет атрибутов «объекты», при определении настраиваемого набора запросов и модели
Ниже мой Джанго код: -
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): класс Meta: модель = ActivableModel поля = 'все'
Теперь, ссылаясь на ActiveSerializer.save() дает мне следующую ошибку: - тип объекта «ActivableModel» имеет нет атрибута «объекты» Ниже приводится строка кода в rest_framework, который дает мне эту ошибку
Почему это так? Разве django не предоставляет объекты «менеджера» по умолчанию для всех моделей? Я также попытался установить параметр _default_manager в классе Meta, но он не работает. Каков правильный способ определения пользовательского менеджера и набора запросов в django?
Заранее спасибо.
Я не хочу иметь объекты в качестве менеджера в моей модели. Но для этого нужен код рамки django rest. Есть ли выход? –
Почему ты этого не хочешь? –
Я определил пользовательский менеджер и набор запросов. Я хочу установить экземпляр настраиваемого менеджера для объектов. Но поскольку объекты не так значимы, я хочу использовать другой термин, например «менеджер». Но он не работает с django-rest, поскольку он ожидает «объектов» в классе модели. Есть ли способ смягчить его? Также дайте мне знать, если я делаю что-то неправильно или есть лучший способ сделать это. Более того, укажите его в своем ответе, чтобы его можно было поддержать. –