如何解决UNIQUE约束失败:Django中的auth_user.username问题



我是Django的新手。我做了一份登记表。两次中有一次,当我尝试注册新用户时,会出现异常"auth_user.username"似乎没有规则,它可以连续工作很多次,并且随着新用户的注册,我出现了错误!

这是我的表格.py

from django.contrib.auth.forms import UserCreationForm,AuthenticationForm
from django.contrib.auth.models import User
from bootstrap_modal_forms.mixins import PopRequestMixin, CreateUpdateAjaxMixin
from django import forms
class CustomUserCreationForm(PopRequestMixin, CreateUpdateAjaxMixin,
UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def clean_email(self):
if User.objects.filter(email=self.cleaned_data['email']).exists():
raise forms.ValidationError("the given email is already registered")
return self.cleaned_data['email']

''

views.py

enter code here
from django.urls import reverse_lazy
from bootstrap_modal_forms.generic import BSModalCreateView,BSModalLoginView
from .forms import CustomUserCreationForm,CustomAuthenticationForm
class SignUpView(BSModalCreateView):
form_class = CustomUserCreationForm
template_name = 'signup.html'
success_message = 'Success: Sign up succeeded. You can now Log in.'
success_url = reverse_lazy('index')

signup.html

enter code here
{% load widget_tweaks %}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384- 
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"> 
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" 
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" 
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" 
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" 
crossorigin="anonymous"></script>
body data-spy="scroll" data-target=".site-navbar-target" data-offset="300">
<form method="post" action="">
{% csrf_token %}
<div class="modal-header">
<h3 class="modal-title">Register</h3>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>

<div class="{% if form.non_field_errors %}invalid{% endif %} mb-2">
{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}
</div>
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" placeholder=field.label %}
<div class="{% if field.errors %} invalid{% endif %}">
{% for error in field.errors %}
<p class="help-block" style="color:red">{{ error }}</p>
{% endfor %}
</div>
</div>
{% endfor %}

寄存器

谢谢

我记得有两种方法可以实现这一点:

  1. 覆盖用户模型的保存方法,并且仅在对象不存在时尝试保存:
def save(self, *args, **kwargs):
if not User.objects.filter(name=self.name).first():
super(User, self).__init__(*args, **kwargs)
  1. 创建自定义模型并从User继承,然后删除唯一约束:
class CustomUser(User):
username = models.CharField(_("User name"), max_length=30, blank=False)

通过这种方式,您可以更好地控制验证。

最新更新