Сбой ограничения NOT NULL: accounts_myuser.password - PullRequest
0 голосов
/ 08 сентября 2018

Я делаю веб-приложение в Django, где пользователи могут создавать учетные записи. Я храню пароли пользователей в незашифрованном виде, поскольку аутентификация в моей системе не полностью зависит от пароля, но также и от OTP. Проблема, с которой я неожиданно столкнулся (раньше она работала нормально) при POST-запросе регистрации, заключается в том, что «ограничение NOT NULL не выполнено: accounts_myuser.password». Я попытался удалить базу данных и миграции и повторно мигрировал, но это не помогло. Я даю ModelForm и Model (custom) ниже. У меня есть только два поля, а именно 'email' и 'username', описанные в моей модели. Это работало нормально, и я мог успешно зарегистрировать пользователей с кодом ниже. Может ли кто-нибудь помочь мне?

forms.py

class UserCreationForm(forms.ModelForm):

    password1 = forms.IntegerField(label='Password', min_value=0000, max_value=9999, widget=forms.PasswordInput)

    password2 = forms.IntegerField(label='Password Confirmation', min_value=0000, max_value=9999,
                                   widget=forms.PasswordInput)


    class Meta:
        model = User
        fields = ['username', 'email']

    def clean_password1(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Passwords do not match!")
        if len(str(password1)) != 4 or len(str(password2)) != 4:
            raise forms.ValidationError("Passwords should be of length Four!")
        return password2

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.password = self.cleaned_data['password1']

        if commit:
            user.save()
        return user

models.py

class MyUserManager(BaseUserManager):

    def create_user(self, username, email, password=None):

        if not email:

            raise ValueError('Users must have an email')

        user = self.model(
                    username = username,
                    email = self.normalize_email(email),
                    password = password
                )

        # user.set_password(password)

        user.save(using=self._db)

        return user


    def create_superuser(self, username, email, password=None):
        user = self.create_user(
                username, email, password
                )
        user.is_admin = True
        user.is_staff = True
        user.set_password(password)
        user.save(using=self._db)
        return user

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Когда вы вызываете методы create_user или create_superuser, передаете ли вы допустимые значения для ключевого слова password?

Потому что, если вы передадите пустой пароль (None) любому из двух методов, это определенно приведет к Ошибка «Не выполнено ограничение NULL» в поле passwerod.

0 голосов
/ 08 сентября 2018

TLDR;
добавить password поле к fields мета-класса как

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

Если вы не добавите поле в fields, Django не будет принимать / принимать данные из form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...