当前位置: 首页 > 知识库问答 >
问题:

“此字段为必填字段”即使填写了所有输入字段也会持续显示

朱丰
2023-03-14

请帮忙。注册页面一直显示此字段是必需的错误。我是初学者谢谢

模型。派克

来自django。数据库导入模型

从django.contrib.auth.models导入AbstractBaseUser, BaseUserManager

类用户管理器(BaseUserManager):

def create_user(self, email, username, full_name, password=None):
    if not email:
        raise ValueError("Users must have an email adress")
    if not username:
        raise ValueError("Users must have a username")
    if not password:
        raise ValueError("Users must have a password")
    if not full_name:
        raise ValueError("Users must have a name")
    user = self.model(
        email=self.normalize_email(email), # return lowercase
        username=username,
        full_name=full_name,
    )
    user.set_password(password) # users set password and change password
    user.full_name = full_name
    user.save(using=self._db)# using the default database in settings.py
    return user

def create_superuser(self, email, username, full_name, password=None):
    user = self.create_user(
        email=self.normalize_email(email),  # return lowercase
        username=username,
        full_name=full_name,
        password=password,
    )
    user.is_admin = True
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)  # using the default database in settings.py
    return user

类帐户(AbstractBaseUser):

email               = models.EmailField(
    verbose_name="email",
    max_length=60,
    unique=True,
)
username            = models.CharField(max_length=30, unique=True)
full_name           = models.CharField(max_length=30, blank=True, null=True)
date_joined         = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login          = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin            = models.BooleanField(default=False)
is_active           = models.BooleanField(default=True)
is_staff            = models.BooleanField(default=False)
is_superuser        = models.BooleanField(default=False)
profile_image       = models.ImageField(max_length=255, null=True, blank=True, default=default_profile)
hide_email          = models.BooleanField(default=True)

USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username", "full_name"]

objects = UserManager()   # tie account to my custom user manager

def __str__(self):
    return self.username

# "Does the user have a specific permission?"
def has_perm(self, perm, obj=None):
    return True

# "Does the user have permissions to view the app `app_label`?"
def has_module_perms(self, app_label):
    return True

views.py

来自django。快捷方式导入、渲染、重定向

来自django。contrib。验证导入登录、注销、验证

从account.forms进口注册表格,帐户认证表格

register_view(请求):

user = request.user
if user.is_authenticated:
    return redirect('home')
if request.method == 'POST':
    form = RegistrationForm(request.POST)
    if form.is_valid():
        form.save()
        email = form.cleaned_data.get('email').lower()
        raw_password = form.cleaned_data.get('password1')
        user = authenticate(email=email, password=raw_password)
        login(request, user)
        return redirect('home')
else:
    form = RegistrationForm()
return render(request, 'account/register.html', {'registration_form': form})

def登录_视图(请求):

context = {}

user = request.user
if user.is_authenticated:
    return redirect("home")

if request.POST:
    form = AccountAuthenticationForm(request.POST)
    if form.is_valid():
        email = request.POST.get('email')
        password = request.POST.get('password')
        user = authenticate(request, email=email, password=password)
        if user is not None:
            login(request, user)
            return redirect("home")
else:
    form = AccountAuthenticationForm()
    context['login_form'] = form
return render(request, "account/login.html", context)

def注销视图(请求):注销(请求)返回重定向(“主页”)

表单。py

从django导入表单

来自django。contrib。授权导入获取用户模型

从…起模型导入帐户

来自django。contrib。验证导入验证

User=get\u User\u model()

班级注册表(forms.ModelForm):

full_name   = forms.CharField()
email       = forms.EmailField(max_length=60, help_text='Required. Add a valid email address.')
password1   = forms.CharField(widget=forms.PasswordInput)
password2   = forms.CharField(widget=forms.PasswordInput, label='Confirm password')


class Meta:
    model = Account
    fields = (
        'email',
        'username',
        'full_name',
        'password1',
        'password2',
    )

def save(self, commit=True):
    user = super(RegistrationForm, self).save(commit=False)
    user.email = self.cleaned_data.get('email')
    user.username = self.cleaned_data.get('username')
    user.full_name = self.cleaned_data.get('full_name')
    if commit:
        user.save()
    return user

def clean_email(self):
    email = self.cleaned_data.get('email')
    qs = User.objects.filter(email=email)
    if qs.exists():
        raise forms.ValidationError(f"Email {email} is already taken")
    return email

def clean_username(self):
    username = self.cleaned_data.get('username')
    qs = User.objects.filter(username=username)
    if qs.exists():
        raise forms.ValidationError(f"Username {username} is already taken")
    return username

def clean(self):
    data = self.cleaned_data
    password1 = self.cleaned_data.get('password1')
    password2 = self.cleaned_data.get('password2')
    if password2 != password1:
        raise forms.ValidationError("Passwords must match")
    return data

类帐户身份验证窗体。ModelForm):

password = forms.CharField(label='Password', widget=forms.PasswordInput)

class Meta:
    model = Account
    fields = ('email', 'password')

def clean(self):
    if self.is_valid():
        email = self.cleaned_data.get('email')
        password = self.cleaned_data.get('password')
    if not authenticate(email=email, password=password):
        raise forms.ValidationError("Incorrect username or password")

共有2个答案

米承嗣
2023-03-14

您的字段html id和名称中很可能有错误,因此表单验证将其注册为空值

羊舌光赫
2023-03-14

问题的原因可能是用户名字段和电子邮件字段被一个使用而另一个使用。

上述代码中有一个示例:

USERNAME_FIELD = "email"
REQUIRED_FIELDS = ["username", "full_name"]

问题可以通过验证和修复这些错误来解决,其中使用电子邮件字段代替用户名字段,反之亦然。

 类似资料:
  • 问题内容: 我从我的android应用程序中的新功能开始,这将有助于填写某些PDF表格。 我发现最好的解决方案是使用iText库。 我可以读取文件,也可以从文档中读取AcroFields,但是是否有可能发现特定字段标记为必填项? 我试图在API文档和Internet上找到此选项,但是没有什么可以帮助解决此问题。 问题答案: 请查看我的书的 13.3.4节,标题为“ AcroForms重新访问”。清

  • 我一直在寻找方法,让jQuery使用html5验证自动写入我所有的输入字段,但我很难告诉它在哪里写入它。 我想要这个 并在结束标记前自动添加所需 我想我可以做一些类似的事情 但它不起作用。任何帮助都非常感谢。

  • 问题内容: 与可选字段相比,应如何处理? 由于所有字段都是可选的,因此我无法根据响应json是否包含某些密钥来真正使我的网络请求失败,只需将其解析为null。 我正在使用的方法 例如,如果我有以下json: 而我的班级: 如果json不包含或不包含密钥,是否有任何选择会失败? 在许多情况下,您可能至少需要解析一些值,而其他值是可选的? 是否有任何模式或库可用于全局处理这种情况? 谢谢。 问题答案:

  • 有没有方法(或快捷方式)填充查询的所有字段? 我们以https://graphql.org/swapi-graphql/为例。 但是如果我想填充所有字段(名称、高度等),该怎么办不需要手动输入?

  • 我用VBA和IE编写了一个脚本来填充两个输入字段来登录网页。 当我尝试执行我的脚本时,它会抛出错误,因为输入字段在其中。如何用凭据填充两个输入字段? 这是网站链接 这是我迄今为止的尝试: 您可以尝试输入任何详细信息。我所需要知道的是我怎样才能填满这两个盒子。 连接到内容的Html元素:

  • 我想在星形符号中显示所需的文本字段 如果用户未输入任何值,则应将边框颜色更改为红色 如果用户输入值,则应将边框颜色更改为绿色