如何在django模型中创建小写字段?

如何在django模型中创建小写字段?,django,django-models,Django,Django Models,使用此方法,我可以将字段另存为小写,但实际情况并非如此 更改现有模型(即内存中)中的字段 我很难弄明白如何在不重写save并在那里进行更改的情况下将此字段强制为小写。但这就分裂了这个小写字段的逻辑。我希望所有这些都能在现场进行。我应该重写什么,以便设置此值强制内存中的小写字母和数据库中的on字母 我不想更改表单,我希望field类中包含所有小写逻辑 我发现了一个类似这样的局部工作: def pre_save(self, model_instance, add): """ Returns

使用此方法,我可以将字段另存为小写,但实际情况并非如此 更改现有模型(即内存中)中的字段

我很难弄明白如何在不重写save并在那里进行更改的情况下将此字段强制为小写。但这就分裂了这个小写字段的逻辑。我希望所有这些都能在现场进行。我应该重写什么,以便设置此值强制内存中的小写字母和数据库中的on字母

我不想更改表单,我希望field类中包含所有小写逻辑


我发现了一个类似这样的局部工作:

def pre_save(self, model_instance, add):
    """ Returns field's value just before saving. """
    attr =  getattr(model_instance, self.attname)
    if attr is not None:
        attr = attr.lower()
        setattr(model_instance, self.attname, attr)
    return attr

def get_prep_value(self, value):
    value = super(LowercaseField, self).get_prep_value(value)
    if value is not None:
        value = value.lower()
    return value
它有一点代码味道,在保存之前无法检查值,但如果不重写实际模型类上的setattr并捕获模型类本身内部的处理,我看不到如何做到这一点。

您可以通过在models.py文件中添加以下代码来重写Django中的“save”方法

def save(self, *args, **kwargs):
    self.yourfiled = self.yourfield.lower()
    return super(ModelsName, self).save(*args, **kwargs)
当然,可以使用循环处理所有参数

对于所有现有记录,您可以创建一个管理命令,该命令可以将所有字符串转换为小写 以下是文件:

如果不想更改Save方法,只需在表单中添加“| lower”标记,该标记将在UI中将所有字符串转换为小写

{{ value|lower }}
希望这有帮助:)

{{ value|lower }}