отключить поле формы, если данные существуют в базе данных - PullRequest
0 голосов
/ 09 января 2020

Я хочу ввести имя пользователя и отключить поле имени пользователя, если оно уже существует во время инициализации формы.

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

class AppUserForm(forms.ModelForm):
    class Meta:
        model=AppUser
        fields=['username','password']


    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)        
        user_id = self.request.POST.get('user_id')
        if AppUser.objects.filter(usernbame=user_id).exists():
            self.fields['username'].disabled = True

Views.py

 #u=AppUser.objects.get(pk=id)
    if AppUser.objects.filter(stu_id=dstu_id).exists():
        u=AppUser.objects.get(stur_id=stu_id)
        username=u.username
        password=u.password
        form = AppUserAuthForm(initial={'username':username, 'password':password})
    else:
        form = AppuserAuthForm() 

1 Ответ

1 голос
/ 09 января 2020

Если вы хотите получить доступ к request.POST данным в __init__ формы, вам необходимо явно указать request при создании экземпляра формы. И вам нужно удалить int из kwargs перед вызовом super(), потому что в противном случае возникнет ошибка, связанная с неожиданным ключевым словом. Итак, по вашему мнению, что-то вроде

form = AppUserAuthForm(initial={'username': username}, request=request)

и в форме __init__:

def __init__(self, *args, **kwargs):
    request = kwargs.pop('request')
    super().__init__(*args, **kwargs)
    user_id = request.POST.get('user_id')
    # Your other code

Однако, поскольку вы используете ModelForm, почему бы не использовать возможности ModelForm, а не делать все это вручную?

Ваше мнение может быть

if AppUser.objects.filter(stu_id=dstu_id).exists():
    u=AppUser.objects.get(stur_id=stu_id)
    form = AppUserAuthForm(instance=u)
else:
    form = AppuserAuthForm()

и ваша форма __init__:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    if self.instance.pk:
        self.fields['username'].disabled = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...