Django Model Calculated field как уровень базы данных?

У меня есть упрощенная модель, представленная ниже :

class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.FloatField()

class Invoice(models.Model):
    product = models.ForeignKey(Product,on_delete=models.PROTECT)
    quantity = models.FloatField()

    @property
    def total(self):
        return self.quantity * self.product.price

Я хотел бы иметь возможность обрабатывать анализ данных по моим счетам-фактурам. Если я загружаю свой набор запросов в список, то свойство total отсутствует :

Invoice.object.all().values_list()

Есть ли способ в django вычислить поле свойства как уровень базы данных? Чтобы было легко анализировать из набора запросов (в идеале я бы хотел загружать в dataframe)

Спасибо за советы!

ленивый метод, который нужно делать, пока вы не найдете лучший способ

result = [{
    "id": invoice.id,
    "product": invoice.product,
    "quantity": invoice.quantity,
    "total": invoice.total,
} for invoice in Invoice.object.all()]

Основываясь на ответе Б. Окбы, я немного адаптировал свой код, преобразуя сначала в датафрейм, а затем вызывая общее значение :

from django_pandas.io import read_frame
df = read_frame(Invoice.objects.all())
df['total'] = df.apply(lambda x: Invoice.objects.get(id=x['id']).total,axis=1)

Но мне все еще интересно, есть ли более приятный способ/более эффективный способ обработки.

Вернуться на верх