Возможно, я устала и что-то не вижу, но я слишком много пыталась.
class Pizza(models.Model):
portion_size = models.ForeignKey('PortionSize', on_delete=models.PROTECT)
pizza_type = models.ForeignKey('PizzaType', on_delete=models.PROTECT)
toppings = models.ManyToManyField('Topping', blank=True)
special = models.BooleanField()
price = models.DecimalField(
max_digits=4, decimal_places=2, editable=False, default=0
)
def calculate_price(self, topping_amount):
print(self.toppings.count())
topping_amount = self.toppings.count()
base_pizza = PizzaBase.objects.get(
portion_size=self.portion_size, pizza_type=self.pizza_type,
special=self.special, topping_amount=topping_amount
)
self.price = base_pizza.price
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.calculate_price()
Это модель, которую я определил для Django, и я пытаюсь установить цена пиццы, которая создается, когда пользователь сохраняет форму, но каждый раз, когда запускается код, значение toppings.count всегда отстает.
Например, если я выберу три начинки, и перед сохраняя форму в админ-панели, было выбрано только две начинки, я бы получил расчетную цену за две начинки. Я пытался изменить порядок метода сохранения, но он ничего не изменил. Я также использовал оболочку, чтобы проверить, была ли проблема, но в оболочке Django все было в порядке с количеством добавок. Я также проверил интерфейс администратора, обновил его несколько раз, очистил кеш и все там тоже выглядело нормально.
Я запустил Сигналы, чтобы решить эту проблему. Создание приемника для сигнала post_save (), но еще не полностью его протестированного.
Кто-нибудь знает, что может происходить? Я запускаю этот код локально, используя SQLite, приложение все еще находится в стадии разработки, и я использую только VSCode, ничего больше.