QuerySet.update 方法不会调用 save()方法; from django.db import models中类Model的save()方法
1
2 问题: 我在执行修改models.Student.objects.filter(pk=8).update(**{'name':'他的姓名178', 'desc':'desc179'}),后拼音没有更改
背景code
"""
class Student(models.Model):
c_name = models.CharField(max_length=100, default='' )
name = models.CharField(max_length=100, unique=True)
pinyin = models.CharField(max_length=150, default='z')
def save(self, *args, **kwargs):
print(f'self.name;{self.name}')
self.pinyin = Pinyin().get_pinyin(self.name, '')
if not self.pk:
last_obj = Student.objects.order_by('-id').first()
new_id = last_obj.pk + 1 if last_obj else 1
self.c_name = 'c' + str(new_id)
super().save(*args, **kwargs)
### 总结 ###
1 在执行ORM update方法时,Django会直接执行数据库操作,而不会调用模型的save方法。具体来说,Django会生成一条SQL语句,然后通过数据库连接执行该语句,将修改后的数据保存到数据库中
2 只有在用create方法时会掉save方法 --- models.ConfigOfTimePoint.objects.create(**{'name':'姓名177', 'desc':'desc7'})
3 用update方法不掉save怎么办? , 见下面: 先获取对象, 然后对象.属性 = xxx, 最后调save方法.
from apps.filestorge import models
obj = models.ConfigOfTimePoint.objects.get(pk=8)
obj.name= '真的姓名176'
obj.save()
"""