Наследование моделей от django.forms - PullRequest
4 голосов
/ 25 октября 2019

Я связываю свои модели с моими формами с помощью forms.ModelForm и запускаю сервер. Я получаю ошибку "ModelForm has no model class specified"

Вот код, который я использую

class UserForm(forms.ModelForm):
    password=forms.CharField(widget=forms.PasswordInput())

    class meta:
        Model= User
        fields=('username' , 'email' , 'password')

1 Ответ

3 голосов
/ 25 октября 2019

Вы допустили некоторые ошибки в своем классе Meta и атрибуте model: это <b>M</b>eta (начинается с заглавной буквы) и <b>m</b>odel (начинается с заглавной буквы):

class UserForm(forms.ModelForm):
    password=forms.CharField(widget=forms.PasswordInput())

    class <b>Meta</b>:
        <b>model</b> = User
        fields = ('username' , 'email' , 'password')

Но этого будет недостаточно. Вы не можете установить пароль модели User, установив атрибут. Джанго хеширует пароль. Вам следует использовать метод User.set_password(..) [Django-doc] . Вы можете сделать это, переопределив метод save():

class UserForm(forms.ModelForm):
    password=forms.CharField(widget=forms.PasswordInput())

    def <b>save</b>(self, commit=True):
        user = super().save(commit=False)
        <b>user.set_password(self.cleaned_data['password'])</b>
        if commit:
            user.save()
        return user

    class Meta:
        model = User
        fields = ('username' , 'email' , 'password')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...