Django 如果数据库中存在数据,则禁用表单字段

Django 如果数据库中存在数据,则禁用表单字段,django,forms,django-rest-framework,Django,Forms,Django Rest Framework,我想输入用户名并禁用用户名字段(如果在表单初始化期间已经存在) 如果数据库中存在用户名,我希望禁用用户名文本字段 class AppUserForm(forms.ModelForm): class Meta: model=AppUser fields=['username','password'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwa

我想输入用户名并禁用用户名字段(如果在表单初始化期间已经存在)

如果数据库中存在用户名,我希望禁用用户名文本字段

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

如果要访问
请求。在表单的
\uuuu init\uuuu
中发布
数据,则需要在创建表单实例时显式传递
请求。在调用
super()
之前,需要从kwargs中删除int,否则将引发与意外关键字相关的错误。所以在你看来

form = AppUserAuthForm(initial={'username': username}, request=request)
在您的表单的
\uuuuu init\uuuu

def __init__(self, *args, **kwargs):
    request = kwargs.pop('request')
    super().__init__(*args, **kwargs)
    user_id = request.POST.get('user_id')
    # Your other code
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    if self.instance.pk:
        self.fields['username'].disabled = True
然而,当您使用模型表单时,为什么不使用模型表单功能,而不是全部手动完成呢

你的观点可能是

if AppUser.objects.filter(stu_id=dstu_id).exists():
    u=AppUser.objects.get(stur_id=stu_id)
    form = AppUserAuthForm(instance=u)
else:
    form = AppuserAuthForm()
您的表单的
\uuuuu init\uuuuu

def __init__(self, *args, **kwargs):
    request = kwargs.pop('request')
    super().__init__(*args, **kwargs)
    user_id = request.POST.get('user_id')
    # Your other code
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    if self.instance.pk:
        self.fields['username'].disabled = True

如果它是一个注册表单,如果数据库中已经存在用户名,您可以抛出错误消息否,在我的情况下不需要此功能。我只想在禁用的文本字段中呈现用户名(如果存在),否则可编辑或用户可以在输入字段中输入新的用户名。您的用户未登录用户,那么您将如何获取用户id或用户名?请检查views.py中的逻辑,何时使用用户名和密码初始化它,用户名应该处于禁用状态。非常感谢。第二个选择对我很有效。伟大的