Как сохранить значение свойства в django.values()?
Моя модель выглядит следующим образом:
class Subs(models.Model):
...
created_at = models.DateTimeField(auto_now_add=True, db_column="order_date", null=True, blank=True)
@property
def created_date(self):
return self.created_at.strftime('%B %d %Y')
Я хочу получить created_Date в моем views.py
data = Subs.objects.values('somevalues','created_date')
Выдает ошибку. Как получить доступ к created_date, чтобы я мог использовать его здесь?
Поскольку значения не работали, я использовал цикл for. вместо того, чтобы сделать это:
data = Subs.objects.values('somevalues','created_date')
Я сделал это :
newarr = [{'created_date': i.created_date} for i in Subs.objects.all()]
Хотя ваш подход работает, это не лучшая практика с точки зрения производительности. Обычно итерирование всего Model.objects.all()
является плохой идеей , потому что оно загружает все строки в память.
В таких случаях у вас есть несколько вариантов:
- если вам нужна простая логика на языке python для данных (например, форматирование здесь), сделайте это на уровне представления (например, теги фильтров) .
- если вам нужно применить тяжелую бизнес-логику, лучше иметь их во время создания/обновления (например, переопределение
.save()
) или иметь несколько cronjobs для этого в непиковое время и сохранить их в дополнительном столбце в DB. .
- если ваши манипуляции требуют запросов на уровне DB и зависят от нескольких столбцов или таблиц, используйте
.annotate()
для добавления их в ваш набор запросов.