Невозможно получить данные формы в базе данных, а объект типа 'UserRegister' не имеет атрибута 'USERNAME_FIELD'.
Form.py from django import forms from .models import UserRegister from django.contrib.auth.forms import UserCreationForm from django.core.exceptions import ValidationError
form.py
from django import forms
from .models import UserRegister
from django.contrib.auth.forms import UserCreationForm
from django.core.exceptions import ValidationError
class UserRegisterForm(UserCreationForm):
username = forms.CharField(max_length=50, required=True, widget=forms.TextInput(attrs={'placeholder': 'Username', 'class': 'input-group'}))
email = forms.EmailField(max_length=70, required=True, widget=forms.EmailInput(attrs={'placeholder': 'Email', 'class': 'input-group'}))
password1 = forms.CharField(max_length=128, required=True, widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'class': 'input-group', 'id': 'password'}))
password2 = forms.CharField(max_length=128, required=True, widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password', 'class': 'input-group', 'id': 'password'}))
class Meta:
model = UserRegister
fields = ['username', 'email', 'password1', 'password2']
def clean_email(self):
email = self.cleaned_data.get('email')
if UserRegister.objects.filter(email=email).exists():
raise ValidationError('This email address is already in use.')
return email
def clean_username(self):
username = self.cleaned_data.get('username')
if UserRegister.objects.filter(username=username).exists():
raise ValidationError('This username is already in use.')
return username
def clean(self):
cleaned_data = super().clean()
password1 = cleaned_data.get('password1')
password2 = cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise ValidationError("Passwords do not match.")
return cleaned_data
model.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.contrib.auth.hashers import make_password
class UserRegister(models.Model):
username= models.CharField(max_length=50,unique=True)
email = models.EmailField(unique=True,max_length=70)
password = models.CharField(max_length=128)
class Meta:
verbose_name = "User Register"
verbose_name_plural = "User Register"
def save(self,*args,**kwargs):
self.password = make_password(self.password)
super(UserRegister,self).save(*args,**kwargs)
def __str__(self):
return self.username
views.py
Создайте свои представления здесь.
login.html {% extends «base.html» %}
{% block title %}
Home
{% endblock %}
{% load static %}
{% block css_files %}
<link rel="stylesheet" href="{% static 'reviews/login.css' %}">
{% endblock %}
{% block content %}
<form method="POST" action="/Products">
{% csrf_token %}
<div class="input-section">
<div class="input-group">
<label for="{{ form.username.id_for_label }}">Username</label>
{{ form.username }}
{% if form.username.errors %}
<div class="error-message">
{% for error in form.username.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="input-group">
<label for="{{ form.email.id_for_label }}">Email</label>
{{ form.email }}
{% if form.email.errors %}
<div class="error-message">
{% for error in form.email.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="input-group">
<label for="{{ form.password1.id_for_label }}">Password</label>
{{ form.password1 }}
{% if form.password1.errors %}
<div class="error-message">
{% for error in form.password1.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="input-group">
<label for="{{ form.password2.id_for_label }}">Confirm Password</label>
{{ form.password2 }}
{% if form.password2.errors %}
<div class="error-message">
{% for error in form.password2.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<button class="submit-btn">Sign In</button>
</div>
</form>
{% endblock %}
Ошибка:-
В течение последних нескольких дней я столкнулся с проблемой, когда не могу получить данные формы в базу данных. Кроме того, я получаю следующую ошибку:
У объекта типа 'UserRegister' нет атрибута 'USERNAME_FIELD'.
Здравствуйте, я полагаю, что ваша проблема заключается в том, что вы пытаетесь создать пользовательскую модель пользователя.
В этом посте есть похожая на вашу проблема, однако решение подробно описано ниже.
Документация для CustomUser
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.contrib.auth.hashers import make_password
class UserRegister(models.Model):
username= models.CharField(max_length=50,unique=True)
email = models.EmailField(unique=True,max_length=70)
password = models.CharField(max_length=128)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = []
class Meta:
verbose_name = "User Register"
verbose_name_plural = "User Register"
def save(self,*args,**kwargs):
self.password = make_password(self.password)
super(UserRegister,self).save(*args,**kwargs)
def __str__(self):
return self.username