Прописать первую букву поля формы (не сохраняет новое значение) - PullRequest
0 голосов
/ 15 октября 2019

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

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))

Я также думаю, что это не очень хорошее решение (я имею в видуиспользуя срезы, дополнительную переменную и конкатенацию строк). Может быть, есть более интересный способ?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Вы можете сделать это методом 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()
        -------------------------

Я не сделалне проверяйте эти коды. Но это должно работать, я ожидал

0 голосов
/ 15 октября 2019

Я использую CBV. Мое решение

class TechnologycreateForm(forms.ModelForm):
    class Meta:
        model = Technology
        fields = ['name', 'group']

    def clean(self):
        cleaned_data = super(TechnologycreateForm, self).clean()
        name = cleaned_data.get('name')
        if not name[0].isupper():
            c_name = name[0].capitalize() + name[1:]
            cleaned_data['name'] = c_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...