Я думаю, у вас есть два пути.
Сначала используйте __save__()
метод в модели.
В модели django (models.Model
) есть метод __save__
. Когда объект модели сохраняется, вы можете сделать дополнительную функцию, которая наследует этот метод.
Для получения дополнительной информации, пожалуйста, проверьте Официальные документы Сохранить ()
Во-вторых, используйте signals
Django поддерживает множество сигналов, включая django.db.models.signals
. Включает в себя pre_save
, post_save
и т. Д. Таким образом, до (после) сохранения объекта модели вы можете выполнить команду sth в signals
.
Пожалуйста, проверьте официальные документы документов
Я думаю, __save__()
метод больше подходит для вашей цели. Так твой код будет ...
class Food(models.Model):
food_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=30, null=False, blank=False)
desc = models.TextField(max_length=200)
price = models.IntegerField(null=False, blank=False)
f_thumbnail = models.ImageField(upload_to=get_food_t_image_name)
DDD_data = models.ImageField(upload_to=get_food_d_image_name)
availability = models.BooleanField(default=True)
discount = models.IntegerField(default=0)
def __str__(self):
return '%s %s %s' % (self.name, self.category_id, self.price)
def save(self, force_insert=False, force_update=False, *args, **kwargs):
# you can add this for only existing model object
if self.pk:
# You can check if only 'price' field changed
_original_food = Food.objects.get(id=self.pk)
if _original_food.price != self.price:
# do somthing here like saving history...
History.objects.create(food_id=self.id, food_price=self.price)
super(Food, self).save(force_insert, force_update, *args, **kwargs)
super(Food, self).save(force_insert, force_update, *args, **kwargs)
Это всего лишь пример. Вы можете добавить и изменить свой код. Я надеюсь, что это поможет вам.