#python #django
#python #django
Вопрос:
вам нужно получить с filter
помощью метода get_related_filter
класса
число просмотров
modelPath = 'Money.models'
app_model = importlib.import_module(modelPath)
cls = getattr(app_model, 'Money')
related_result = cls().get_related_filter(search_query='search_query')
models.py
class Money(models.Model):
money = models.DecimalField(max_digits=19, blank=True, default=0, decimal_places=2)
def get_related_filter(self, **kwargs):
results = super(Money, self).objects.filter(Q(money__icontains=kwargs['search_query']))
return results
def __str__(self):
return self.money
почему выдает 'super' object has no attribute 'objects' Python Django
, а не возвращает filter
Комментарии:
1. Почему бы вам просто не использовать
Money.objects.filter(...)
. Ошибка означает , что суперкласс ofMoney
, theModel
не имеетobjects
.2. Делает модели. У класса Money есть атрибут под названием «объекты»? Я предполагаю, что нет.
3. @NicholasHunter: да, поскольку метакласс
Model
(theModelBase
) заполнит его, если вы не укажете другого менеджера.
Ответ №1:
С ним нет смысла работать super(Money, self)
по двум причинам:
- этот прокси-объект будет разрешен
Model
, ноModel
ни у его родителей нетobjects
атрибута; и - даже если бы это было так, вы можете получить доступ только
.objects
к классу модели, а не к экземпляру.
Таким образом, вы можете фильтровать с помощью:
class Money(models.Model):
money = models.DecimalField(max_digits=19, blank=True, default=0, decimal_places=2)
def get_related_filter(self, search_query, **kwargs):
return Money.objects.filter(money__icontains=search_query)
def __str__(self):
return str(self.money)
Также __str__
предполагается, что он возвращает строку, а не десятичную дробь, поэтому вы должны вернуть str(self.money)
, а не self.money
.