Post_save не удается создать экземпляр для поля OneToOneField

Пытаясь впервые использовать сигналы, я тестирую сценарий, в котором после создания экземпляра пользователя создается профиль, который привязывается к пользователю. Однако тест не проходит. Я читал похожие вопросы, но там используются два сигнала.

Django создает профиль для пользователя signal

Создайте сигнал post_save, который создает для меня объект профиля

Почему в этих случаях используются два сигнала? Как я могу получить профиль, созданный в моем случае?

from django.test import TestCase

from ..forms import CreateProfileForm


class TestNewUserProfileCreated(TestCase):
    '''Verify that a user profile is created once
    a user has registered with a username and password.'''

    @classmethod
    def setUpTestData(cls):
        user_submitted_data = {
            "username": "MockUser",
            "password1": "#hf7*3k",
            "password2": "#hf7*3k"
        }
        cls.form = CreateProfileForm(**user_submitted_data)
        cls.user = cls.form.save()

    def test_new_user_profile_form_pass(self):
        self.assertTrue(hasattr(self.user, 'profile'))

forms.py

class CreateProfileForm(UserCreationForm):

    def __init__(self, *args, **kwargs):
        pass

    def save(self, *args, **kwargs):
        pass


    class Meta:
        pass

models.py

class Profile(Model):
    user = OneToOneField(
        settings.AUTH_USER_MODEL, on_delete=CASCADE,
        related_name="profile"
    )
    favorite_images = ManyToManyField(
        FavoriteImage, related_name="favorites"
    )
    follows = ManyToManyField("self", related_name="followers")
    following = ManyToManyField("self", related_name="following")

receivers.py

from .models import Profile


def create_profile_receiver(sender, instance, created, **kwargs):
    if created:
        profile = Profile.objects.create(user=instance)
        instance.profile = profile

app.py

from django.apps import AppConfig
from django.conf import settings
from django.db.models.signals import post_save

class ImagesConfig(AppConfig):
    name = 'images'

    def ready(self):
        from . import receivers

        app_models = self.get_models()

        post_save.connect(
            receivers.create_profile_receiver, sender=settings.AUTH_USER_MODEL
        )

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'images.apps.ImagesConfig',
]
Вернуться на верх