仅更新该属性而不是所有模型,django
Posted
技术标签:
【中文标题】仅更新该属性而不是所有模型,django【英文标题】:Update only that property not all model, django 【发布时间】:2021-12-17 23:43:22 【问题描述】:@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
我对政策有这种逻辑。对于创建的每个策略,我都想增加一个属性 nnumber(这不是我的情况)。
我希望在保单日期为今天日期时更改该保单的状态。但是当我更改它时,策略计数器正在增加。
谁能帮我只更新状态而不更新其他属性?
提前致谢
【问题讨论】:
所以您不想增加特定状态更新的计数器? 没错!我想这样做。 【参考方案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
【讨论】:
以上是关于仅更新该属性而不是所有模型,django的主要内容,如果未能解决你的问题,请参考以下文章
Django 仅序列化一个字段而不是相关字段中的整个模型(只读)