Обновите только это свойство не всей модели, django

#python #django #web #backend

Вопрос:

 @property def policy_escape(self):  if self.date - datetime.date.today:  self.status = 2  self.save()  def save(self, *args, **kwargs):  self.counter = counter   1  

У меня есть такая логика для политики. Для каждой созданной политики я хочу увеличить номер свойства(это не совсем мой случай).

Я хочу, чтобы дата политики была сегодняшней датой, чтобы изменить статус этой политики. Но когда я изменяю его, счетчик политики увеличивается.

Может ли кто-нибудь помочь мне обновить только статус без обновления других свойств?

Заранее спасибо

Комментарии:

1. Таким образом, вы не хотели бы увеличивать счетчик для этого конкретного обновления статуса?

2. Точно! Я хочу это сделать.

Ответ №1:

Вы могли бы ограничить update_fields :

 @property def policy_escape(self):  if self.date - datetime.date.today:  self.status = 2  self.save(update_fields=("status",))  

Однако конкретный объект Python все равно будет иметь измененный счетчик. Таким образом, вам придется избегать любых других save вызовов этого объекта.

Вместо этого вы могли бы передать обычай kwarg :

 @property def policy_escape(self):  if self.date - datetime.date.today:  self.status = 2  self.save(update_counter=False)  def save(self, *args, **kwargs, update_counter=True):  if update_counter:  self.counter  = 1  # ...  super().save(*args, **kwargs):  

Другой способ save вообще избежать вызова-использовать Queryset.update вместо этого:

 @property def policy_escape(self):  if self.date - datetime.date.today:  self.__class__.objects.filter(pk=self.pk).update(status=2)  # self.status = 2 # if the current object should reflect that change