我重写了save()方法,但新代码只应用于新记录

2024-09-29 19:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用小写字母写标题。我覆盖了save()方法并包含了self.title.lower(),这对于我创建的任何新记录都非常有效。但是,当我修改现有记录时,标题不会更改为小写?有人知道为什么吗?或者有人能告诉我相关文档的方向吗

我在表中有一个多对多字段,我是否应该更新我的m2m_changed信号以包含解决该问题的代码

def save(self, *args, **kwargs):
if not self.slug:
    self.slug = unique_slug_generator(self)
    self.title = self.title.lower()
            
    super(CategoryTree, self).save(*args, **kwargs)  
else:
    super(CategoryTree, self).save(*args, **kwargs)  

Tags: 方法文档self标题titlesave记录args
1条回答
网友
1楼 · 发布于 2024-09-29 19:33:29

根据您的代码,只有在实例没有slug时才会降低标题,这通常是在创建对象时。因此,我建议在整个表中使用更新操作

from django.db.models.functions import Lower

CategoryTree.objects.update(title=Lower('title'))

请注意,这是一个一次性操作,它会将每个title值更新为相应的小写值

或者,您可以将save(...)方法修改为

def save(self, *args, **kwargs):
    if not self.slug:
        self.slug = unique_slug_generator(self)

    if not self.title.islower():
        self.title = self.title.lower()

    super(CategoryTree, self).save(*args, **kwargs)

相关问题 更多 >

    热门问题