如何在Django中自动大写表单提交字段?

goe*_*elv 4 python sorting django django-models django-forms

我有一个ProductForm,用户可以添加一个Product与信息,如数据库title,pricecondition.

如何使用当用户提交表单时,title字段的第一个字母会自动大写?

例如,如果用户在表单中键入"优质床垫",则django将其保存为数据库中的"优质床垫".

仅供参考,我问的原因是因为当我在页面上显示所有产品对象时,Django按标题排序的功能区分大小写.因此,"Bravo","糟糕","惊人"将被分类为"惊人","勇敢","可怕"作为用户时,我们知道这不是按字母顺序排列的.

谢谢您的帮助!

Jer*_*wis 16

表单有一个内置的钩子,用于清理特定字段(docs),这对于这段代码来说是一个更清晰(双关语)的位置:

class ProductForm(forms.Form):
    ...
    def clean_title(self):
        return self.cleaned_data['title'].capitalize()
Run Code Online (Sandbox Code Playgroud)

代码远远少于接受的答案,没有不必要的覆盖.


Tim*_*ony 9

您可以覆盖Model的save方法(它的好处是能够在一个地方简洁地处理多个字段):

class Product(models.Model):
    ...
    def save(self, *args, **kwargs):
        for field_name in ['title', 'price', ... ]:
            val = getattr(self, field_name, False)
            if val:
                setattr(self, field_name, val.capitalize())
        super(Product, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)