在使用 Django 的 CreateView 时,如何在保存之前修改表单数据?

enc*_*nce 5 python django django-class-based-views

我正在使用CreateViewDjango 并且我试图找出如何修改在保存之前发送的任何文本。例如,现在我只想在保存之前将所有文本小写。

我知道我需要使用,form_valid()但我似乎无法正确使用。

表格.py

class ConfigForm(forms.ModelForm):
    class Meta:
        model  = Config
        fields = ["heading", "name", "data", "rating"]
Run Code Online (Sandbox Code Playgroud)

视图.py

def form_valid(self, form):
    super().form_valid(form)
    form.fields["heading"].lower()
    form.fields["name"].lower()
    form.fields["data"].lower()
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 8

这不应该在 form_valid 中完成。你应该在表单本身中做到这一点。不要让 CreateView 自动为你创建一个表单,而是明确地做并覆盖该clean方法。

class MyForm(forms.ModelForm):
   class Meta:
      model = MyModel
      fields = ('list', 'of', 'fields')

   def clean(self):
       for field, value in self.cleaned_data.items():
           self.cleaned_data['field'] = value.lower()
Run Code Online (Sandbox Code Playgroud)

...

class MyCreateView(views.CreateView):
    form_class = MyForm
Run Code Online (Sandbox Code Playgroud)