Я пытаюсь создать систему, в которой пользователь может сделать бронирование на рейс. У меня есть две модели с именами Item
и Booking
.
class Item(models.Model):
item_name = models.CharField(max_length=100)
item_price = models.DecimalField(max_digits=6, decimal_places=2)
def __str__(self):
return self.item_name
class Booking(models.Model):
source = models.CharField(max_length=1000)
date_booked = models.DateTimeField(auto_now_add=True)
date_of_travel = models.DateTimeField()
destination = models.CharField(max_length=1000)
first_name = models.CharField(max_length=250)
last_name = models.CharField(max_length=250)
luggage_items = models.ManyToManyField(Item)
def __str__(self):
return f"{self.first_name} {self.source}-{self.destination}-{self.date_of_travel}"
. При создании бронирования пользователь может выбирать элементы модели Item
, представленной в виде списка luggage_items
. С каждым предметом связана цена. Я хотел бы иметь дополнительное поле в каждом экземпляре бронирования с именем total_price
, которое является общей суммой для этого экземпляра всех элементов, которые пользователь выбирает при бронировании. Я также хотел бы, чтобы это обновлялось всякий раз, когда пользователь изменяет свое бронирование по запросу PUT
. Я не знаю, как это реализовать. Я попытался добавить в модель Booking
следующее:
@property
def total_price(self):
queryset = self.luggage_items.through.objects.all().aggregate(
total_price=models.Sum('item__item_price'))
return queryset["total_price"]
Но это не работает, оно влияет на total_price
для всех Booking
экземпляров.
Вот мой serializers.py:
from rest_framework import serializers
from .models import Item, Booking
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'item_name', 'item_price')
class BookingSerializer(serializers.ModelSerializer):
class Meta:
model = Booking
fields = ('id', 'source', 'destination', 'date_of_travel',
'first_name', 'last_name', 'luggage_items')
и мой views.py
from django.shortcuts import render
from rest_framework import viewsets, permissions
from .models import Item, Booking
from .serializers import ItemSerializer, BookingSerializer
# Create your views here.
class ItemViewset(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
class BookingViewset(viewsets.ModelViewSet):
queryset = Booking.objects.all()
serializer_class = BookingSerializer