AssertionError: OneToOneField(True) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self' Django
Я новичок в Django и это мой первый проект. Делаю сайт с регистрацией, но при запуске сервера вылетает данная ошибка. Понятия не имею почему.
Models:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
username = models.OneToOneField(max_length=18, unique=True, blank=False, to=True,
on_delete=True)
password = models.CharField(max_length=30)
password1 = models.CharField(max_length=30)
USERNAME_FIELD = 'username'
Forms:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import *
class RegisterUserForm(UserCreationForm):
username = forms.CharField(label='Логин', widget=forms.TextInput(attrs={'class': 'form-
input'}))
password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(attrs={'class': 'form-
input'}))
password2 = forms.CharField(label='Повтор пароля', widget=forms.PasswordInput(attrs={'class':
'form-input'}))
class Meta:
model = User
fields = ('username', 'password1', 'password2')
widgets = {
'username': forms.TextInput(attrs={'class': "form-input"}),
'password1': forms.PasswordInput(attrs={'class': "form-input"}),
'password2': forms.PasswordInput(attrs={'class': "form-input"}),
}
Views:
from main.forms import RegisterUserForm
class RegisterUser(CreateView):
form_class = RegisterUserForm
template_name = 'main/reg.html'
success_url = reverse_lazy('login')
Ответы (1 шт):
В модели User у поля username OneToOnefield - связь один к одному. Вы не указали связную модель для User и почему on_delete стоит в значении True.И для поля со связью свойства max_length и unique являются лишними. Свойство blank разрешает полю быть пустым и его не нужно ставить в false, оно ставится по умолчанию. to=True - это вообще что? Должно быть примерно так:
username = models.OneToOneField(Model,on_delete=models.PROTECT).
Model - это модель, которая будет связана с User, а on_delete - это поведение при удалении связной записи. В данном примере я привел PROTECT - он запрещает каскадные удаления (то есть если вы захотите удалить запись, которая связана с другой записью - выкинет исключение и запретит это сделать, пока они будут связаны). Про on_delete можете почитать в документации или здесь:https://devman.org/encyclopedia/django_orm/on_delete/