Как изменить данные формы перед ее сохранением при использовании CreateView от Django? - PullRequest
0 голосов
/ 12 декабря 2018

Я использую CreateView Django и пытаюсь выяснить, как я могу изменить любой текст, который отправляется до его сохранения.Например, сейчас я только пытаюсь использовать строчные буквы для всего текста перед сохранением.

Я знаю, что мне нужно использовать form_valid(), но я не могу понять, как это правильно.

forms.py

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

views.py

def form_valid(self, form):
    super().form_valid(form)
    form.fields["heading"].lower()
    form.fields["name"].lower()
    form.fields["data"].lower()

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Переопределить get_form_kwargs метод для обновления kwargs, который создает экземпляр формы.

Решение :

def get_form_kwargs(self):
    # update super call if python < 3
    form_kwargs = super().get_form_kwargs()
    form_kwargs['data']['str_field_name'] = form_kwargs['data']['str_field_name'].lower()

    return form_kwargs

Ссылка : get_form_kwargs docs

0 голосов
/ 12 декабря 2018

Это не должно быть сделано в 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()

...

class MyCreateView(views.CreateView):
    form_class = MyForm
...