TypeError: save() получил неожиданный аргумент ключевого слова 'force_insert'

Я пытаюсь реализовать сигнал, который создает Profile при сохранении экземпляра User.

Попытка протестировать это с моей формой для регистрации пользователей дает мне следующий стектрейс:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/auth/register/

Django Version: 3.2.4
Python Version: 3.8.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_extensions',
 'webpack_loader',
 'home',
 'personal_list',
 'utils',
 'authentication']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/noxlock/my-anime-openings-list/MAOL/authentication/views.py", line 12, in register
    form.save()
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/contrib/auth/forms.py", line 131, in save
    user.save()
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/contrib/auth/base_user.py", line 67, in save
    super().save(*args, **kwargs)
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/db/models/base.py", line 726, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/db/models/base.py", line 774, in save_base
    post_save.send(
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/dispatch/dispatcher.py", line 180, in send
    return [
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "/home/noxlock/my-anime-openings-list/MAOL/personal_list/models.py", line 45, in create_profile
    Profile.objects.create(user=instance)
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/noxlock/.local/lib/python3.8/site-packages/django/db/models/query.py", line 453, in create
    obj.save(force_insert=True, using=self.db)

Exception Type: TypeError at /auth/register/
Exception Value: save() got an unexpected keyword argument 'force_insert'

Обычно это происходит из-за отсутствия **kwargs в определении метода save, но на самом деле у меня нет такого метода для моей модели Profile, и я использую стандартную модель Django User, для которой это единственное расширение, которое я написал.

Ниже приведена моя модель профиля и код сигнала.

from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User

from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill

from home.models import ModelAbstract


# P.S ModelAbstract doesn't have a save method either, just adds some nifty date fields.
class Profile(ModelAbstract):

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = ProcessedImageField(
        upload_to='avatars', default='avatars/placeholder.png',
        processors=[ResizeToFill(256, 256)],
        format="PNG"
    )
    banner = ProcessedImageField(
        upload_to='banners', default='banners/placeholder.png',
        processors=[ResizeToFill(256, 256)],
        format="PNG"
    )

    def get_recent_ratings(self):
        pass

    def get_top_ratings(self):
        pass

# On User creation, make a profile as well
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

Знаете что, у меня действительно была проблема с отсутствием *args и **kwargs в моем методе сохранения. Только в родительской модели, от которой наследовался Profile.

Вот как выглядел код:

class DateData(models.Model):


    date_created = models.DateTimeField()
    last_modified = models.DateTimeField()

    class Meta:
        abstract = True

    def save(self):
        # Only set this field on the first save
        if not self.date_created:
            date_created = timezone.now()
        last_modified = timezone.now()



class ModelAbstract(DateData):


    class Meta:
        abstract = True

Просто нужно было изменить это на def save(self, *args, **kwargs):

Вернуться на верх