python - 我已经重写了 save() 方法,但新代码仅应用于新记录
问题描述
我需要标题为小写。我覆盖了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)
解决方案
根据您的代码,仅当实例没有 a 时才会降低标题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)
推荐阅读
- node.js - 如何重新打开nodejs服务器信息
- listview - 如何为ListView UWP中的每一行设置颜色差异指针
- html - 如何在 Bootstrap 表中垂直对齐文本
- php - 使用 SimpleXML/DOM 通过 php 将节点从一个 XML 复制到另一个
- c++ - 我调用了av_probe_input_format3(),现在我想调用avcodec_find_decoder(),如何在编解码器中转换格式?
- github - GitHub 发布、多个文件和版本控制
- flutter - 如何在右侧领先的 listTitle 中设置图像?
- node.js - 无法连接到本地网络中的 kafka 容器
- java - swapAdapter() 正在刷新 RecyclerView 视图但不是数据 - Android - Java
- javascript - 如何在旧的 React 站点中实现 react-helmet-async