首页 > 解决方案 > 将表单域的第一个字母大写(不保存新值)

问题描述

我正在尝试自动将模型表单字段的第一个字符转换为大写,但保存了原始值。

class TechnologyCreatePopup(CreateView):

    model = Technology
    form_class = TechnologycreateForm
    template_name = 'technology_create.html'

    def form_valid(self, form):
        """If the form is valid, save the associated model."""
        self.object = form.save(commit=False)
        if form.cleaned_data['name'][0].isupper():
            self.object.save()
        else:
            name = form.cleaned_data['name']
            c_name = name[0].capitalize() + name[1:]
            print(c_name)  ---> print me name with uppercase! 
            form.cleaned_data['name'] = c_name
            self.object.save()
        return HttpResponse(
            '<script>opener.closePopup(window, "%s", "%s", "#id_technology");</script>' % (self.object.pk, self.object))

我也认为这不是一个好的解决方案(我的意思是使用切片、附加变量和字符串连接)。也许还有更有趣的方式?

标签: django

解决方案


你可以save()在你的models.py.

class Technology(models.Model):
    ---
    def save(self, *args, **kwargs):
        self.name = self.name.capitalize()
        return super().save(self, *args, **kwargs)

或者,如果您真的想按照自己的方式去做。

def form_valid(self, form):
        """If the form is valid, save the associated model."""
        obj = form.save(commit=False)

        if obj.name[0].isupper():
            obj.save()
        else:
            obj.name = obj.name[0].capitalize() + obj.name[1:]
            obj.save()
        -------------------------

我没有测试这些代码。但它应该可以正常工作


推荐阅读