Задать вопрос
@Evgeny_A

Как проверить изменилось ли конкретное поле при сохранении экземпляра?

Есть вот такая модель:

from django.db import models
class Car(models.Model)
    price = models.IntegerField('Price')

При сохранении экземпляра этой модели, мне нужно проверить как изменилось поле Price (если оно вообще изменилось). Если цена стала больше, то делать одно, если меньше, то делать другое. Что-то вроде такого:

from django.db.models.signals import post_save
@receiver(post_save, sender=Car)
def car_is_saved(instance, **kwargs):
    if instance.newprice > instance.price:
        # Цена увеличилась
    elif instance.newprice < instance.price:
        # Цена уменьшилась
    else:
        # Цена не изменилась

Откуда взять instance.newprice?
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Evgeny_A Автор вопроса
Нашел такое решение, но оно создает дополнительные запрос к базе. Хочется этого избежать, конечно.

@receiver(pre_save, sender=Car)
def car_is_saved(sender, instance, **kwargs):
    try:
        obj = sender.objects.get(pk=instance.pk)
    except sender.DoesNotExist:
        pass
    else:
        if obj.price == instance.price:
            # Цена не изменилась
            pass
        elif obj.price < instance.price:
            # Цена поднялась
        elif obj.price > instance.price:
            # Цена снизилась
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы