При попытке сделать миграцию в Django появляется ошибка TypeError: __init__() missing 1 required positional argument: 'on_delete'
При попытке сделать миграцию в Django появляется ошибка TypeError: init() missing 1 required positional argument: 'on_delete'
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from user_profile.models import User
# Create your models here.
class MyAccountManager(BaseUserManager):
def create_user(self, first_name, last_name, username, email, password=None):
if not email:
raise ValueError('User must have an email address')
if not username:
raise ValueError('User must have an username')
user = self.model(
email = self.normalize_email(email),
username = username,
first_name = first_name,
last_name = last_name,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, first_name, last_name, email, username, password):
user = self.create_user(
email = self.normalize_email(email),
username = username,
password = password,
first_name = first_name,
last_name = last_name,
)
user.is_admin = True
user.is_active = True
user.is_staff = True
#user.is_superadmin = True
user.save(using=self._db)
return user
class Accounts(AbstractBaseUser):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
username = models.CharField(max_length=50, unique=True)
email = models.EmailField(max_length=100, unique=True)
phone_number = models.CharField(max_length=50)
# required
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_superadmin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_time', 'last_name']
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perms(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
models.py venv
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
name=models.CharField(max_length=250, verbose_name='نام')
location=models.CharField(max_length=250, verbose_name='موقعیت', blank=True)
website=models.URLField(verbose_name='وب سایت', blank=True)
bio=models.TextField(verbose_name='توضیحات', blank=True)
user = models.ForeignKey(User)
Спасибо
Ответы (1 шт):
Автор решения: Uncle_Ragnar
→ Ссылка
В одной из моделей Вы используете поле ForeignKey, в параметрах этого поля обязательно должно быть указано on_delete.
Например:
field = models.ForeignKey(Model, related_name='related_name', verbose_name='Псевдоним поля', on_delete=models.SET_DEFAULT, default=None)
Есть несколько вариантов использования параметра on_delete:
CASCADE - в случае удаления связанной модели, удалится и текущая модель
DO_NOTHING - ничего не делать при удалении
PROTECT - запрещает удалять связанную модель
SET_NULL - в случае удаления связанной модели назначает поле текущей модели в null (но для этого в поле текущей модели нужно указать null=True)
SET_DEFAULT - назначает параметру текущей модели дефолтное значение (но для этого в поле текущей модели нужно указать default=None)
