Невозможно получить данные формы в базе данных, а объект типа '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 %}

Ошибка:-

enter image description here

В течение последних нескольких дней я столкнулся с проблемой, когда не могу получить данные формы в базу данных. Кроме того, я получаю следующую ошибку:

У объекта типа '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
Вернуться на верх