我如何检查 Django 中是否存在用户名和邮件

Ayt*_*tek 2 python email django python-3.x

我刚刚开始学习Django。我做了一个登记表。它运作良好。但我无法检查此注册表中是否存在用户名和邮件。如果我尝试使用相同的用户名进行注册,则会收到(1062,“密钥\'用户名\'的重复条目\'asdasd\'”)错误。(asdasd 我的用户名..)

\n\n

我该如何解决这个问题?

\n\n

表格.py

\n\n
from django import forms\nclass RegisterForm(forms.Form):\n    username = forms.CharField(required=True, max_length=20, label= "Kullan\xc4\xb1c\xc4\xb1 Ad\xc4\xb1")\n    email = forms.EmailField(required=True, label="E-Mail")\n    password = forms.CharField(max_length=20, label= "Password", widget=forms.PasswordInput)\n    confirm = forms.CharField(max_length=20, label="RePassword",widget=forms.PasswordInput)\ndef clean(self):\n    username = self.cleaned_data.get("username")\n    email = self.cleaned_data.get("email")\n    password = self.cleaned_data.get("password")\n    confirm = self.cleaned_data.get("confirm")\n\n\n    if password and confirm and password != confirm:\n        raise forms.ValidationError("Passwords dont match")\n\n    values = {\n        "username" : username,\n        "email" : email,\n        "password" : password,\n    }\n    return values\n
Run Code Online (Sandbox Code Playgroud)\n\n

视图.py

\n\n
from django.shortcuts import render, redirect\nfrom .forms import RegisterForm\nfrom django.contrib import messages\nfrom django.contrib.auth.models import User\nfrom django.contrib.auth import login\n\n\ndef register(request):\n\n    form = RegisterForm(request.POST or None)\n\n    if form.is_valid():\n        username = form.cleaned_data.get("username")\n        email = form.cleaned_data.get("email")\n        password = form.cleaned_data.get("password")\n        newUser = User(username=username)\n        newUser.email = email\n        newUser.set_password(password)\n        newUser.save()\n        login(request, newUser)\n        messages.success(request,"Successful on Register")\n        return redirect("index")\n    context = {\n        "form": form\n    }\n    return render(request, "register.html", context)\n\n\ndef loginUser(request):\n    return render(request, "login.html")\n\ndef logoutUser(request):\n    return render(request, "logout.html")\n
Run Code Online (Sandbox Code Playgroud)\n\n

太感谢了!

\n

Sat*_*evg 5

最直接的方法是将方法添加到表单类中

def clean_username(self):
    if User.objects.filter(username=username).exists():
        raise forms.ValidationError("Username is not unique")

def clean_email(self):
    if User.objects.filter(email=email).exists():
        raise forms.ValidationError("Email is not unique")
Run Code Online (Sandbox Code Playgroud)