Как сохранить значение свойства в 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() для добавления их в ваш набор запросов.
Вернуться на верх