#python #django #postgresql
#python #django #postgresql
Вопрос:
Моя модель выглядит так. Другие поля обновляются в базе данных, как и ожидалось. Проблема заключается в получении общего значения, хранящегося в базе данных, путем умножения price_per_unit на количество. Есть ли что-то, чего мне не хватает?
from django.db import models
from django.contrib.auth.models import User
from django.db.models import Sum
from django.db.models import F
class CowData(models.Model):
title = models.CharField(max_length=20, default="item")
user = models.CharField( max_length=20, null=False)
added_on = models.DateField(auto_now_add=True)
feed = models.CharField(max_length=20, null=True)
quantity = models.PositiveIntegerField()
price_per_unit = models.PositiveIntegerField()
total = models.PositiveIntegerField(blank=True, null=True)
total = ( CowData.objects
.filter()
.aggregate(
total=Sum('total', field="quantity*price_per_unit")
)['total']
)
Комментарии:
1. Не могли бы вы, пожалуйста, добавить еще немного кода о том, как вы используете модель? Если у вас уже есть
quantity
иprice_per_unit
, хранящиеся в вашей базе данных, вероятно, имеет больше смысла создатьtotal
свойство или что-то в этом роде. Объяснение того, чего вы хотите достичь и как использовать эти ценности, поможет нам найти хорошее решение.2. @GlennDJ, спасибо за ответ. Я сделаю все, что в моих силах, чтобы внести ясность. Я пытаюсь разработать приложение для инвентаризации фермы, дневниковая ферма — это одна категория. У меня есть форма django, в которой пользователь должен вводить разные значения, например, в моей модели. Я хотел бы рассчитать общую цену на основе количества и price_per_unit и сохранить ее в поле с именем total для каждой новой записи. Остальное — это просто файл представления, который отображает страницу формы.
3. Хорошо, понял, тогда я собираюсь предложить другой подход в своем ответе.
Ответ №1:
Судя по вашему комментарию, наилучшим подходом является перезапись save
метода модели, который позволяет total
вычислять значение каждый раз перед сохранением экземпляра. Пример:
class CowData(models.Model):
quantity = models.PositiveIntegerField()
price_per_unit = models.PositiveIntegerField()
total = models.PositiveIntegerField(blank=True, null=True)
def save(self, *args, **kwargs):
self.total = self.price_per_unit * self.quanity
super(CowData, self).save(*args, **kwargs)