#django-models #django-views
#django-модели #django-представления
Вопрос:
Я пытаюсь сложить количество билетов (count) и (sum) цену каждого купленного билета. Стоимость билета фиксирована — 25 долларов за штуку. Я использовал это в своем models.py:
class Ticket(models.Model):
venue=models.CharField(max_length=100)
quantity=models.IntegerField(null=True)
price=models.DecimalField(max_digits=10, decimal_places=2)
loop=models.BooleanField(default=True)
purchaser = models.ForeignKey(User, related_name="purchases",
on_delete=models.PROTECT)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
Я в замешательстве, где выполнять наборы запросов, чтобы получить общее количество билетов и суммирование цен? Было бы
total_price=Ticket.objects.all().aggregate(Sum('price'))
ticket_count = Tickets.objects.count()
Будут ли вышеуказанные переменные (например, total_price и _ticket_count) включены в качестве столбцов в моделях или это должно быть указано только в представлениях? Может ли количество совпадать с count? Большое вам спасибо!
Комментарии:
1. Я думаю, вы сохраняете количество билетов, купленных пользователем, в количестве?
2. Привет, Атул, это правильно. Я хотел сохранить количество или, в данном случае, «количество» билетов, умноженное на фиксированную цену в 25 долларов. Я также хотел посмотреть, могу ли я добавить к этому налоги. Я попытался добавить поле налогов как 0.0725. Не могли бы вы, пожалуйста, посоветовать, как выполнить запрос к нему? Я добавил: @property def total (self): q = self.цена * self.количество t = q * 0.0725 TotalPrice = t self.цена возвращает TotalPrice в модели Ticket, но безрезультатно. Спасибо за ваш ответ, мы будем очень признательны за ваше мнение!
Ответ №1:
from django.db.models import Sum
# This will give total tickets sold to all the user
total_tickets = Ticket.objects.aggregate(Sum('quantity'))
total_cost = total_tickets * 25
Комментарии:
1. Спасибо Atul за ваш ответ. Это должно быть включено прямо под моделью билета или представлениями? Я пытался это сделать, и это не сработало. Я попробовал этот запрос: «total»:Ticket.objects.filter(purchaser=User.objects.get(id=request.session[‘user_id’])).aggregate(total_cost=Sum(F(‘price’)*F(‘quantity’) output_field=FloatField()) в views.py но это недопустимый synthax. К вашему сведению, я включил—default = 25.00 в поле price — будут ли они правильными? БОЛЬШОЕ вам спасибо!
2. В представлениях вам нужно сделать это.