QuerySet.update 方法不会调用 save()方法; from django.db import models中类Model的save()方法

 

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()

"""

posted @ 2022-09-05 10:18  tslam  阅读(28)  评论(0编辑  收藏  举报