При попытке сделать миграцию в 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

migrateerror

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)
→ Ссылка