Django переопределенный метод сохранения модели, возвращающий старые данные - PullRequest
0 голосов
/ 24 апреля 2020

Возможно, я устала и что-то не вижу, но я слишком много пыталась.

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, ничего больше.

1 Ответ

0 голосов
/ 25 апреля 2020

Ответ на этот вопрос здесь: https://docs.djangoproject.com/en/3.0/ref/signals/#m2m -корректированный

Отношения «многие ко многим» сохраняются после сохранения модели. Поэтому я создал сигнал для решения этой проблемы.

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...