Я пытаюсь расширить модель User, чтобы я мог генерировать слаг, который я могу использовать в отображении URL.Используя панель инструментов отладки, я вижу, что мои методы create_profile и save_profile зарегистрированы как получатели для post_save, но когда я сохраняю нового пользователя, я вижу SQL-запрос, который используется для создания пользователя, но нет соответствующего запроса для создания UserProfile.Будем благодарны за любую помощь, которую вы можете оказать.
models.py
from django.db import models
from django.contrib.auth.models import User, PermissionsMixin
from django.utils.text import slugify
from django.urls import reverse_lazy
from django.db.models.signals import post_save
# Create your models here.
class User(User, PermissionsMixin):
def __str__(self):
return '@{}'.format(self.username)
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, related_name='profile', on_delete = models.CASCADE)
slug = models.CharField(max_length=255, unique=True)
def __str__(self):
return self.slug
def save(self, *args, **kwargs):
slug = slugify(self.user.username)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse_lazy(
'accounts:profile',
kwargs = {'slug': self.slug}
)
class Meta:
db_table = 'user_profiles'
signal.py
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User, UserProfile
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
profile = UserProfile.objects.create(user=user)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
apps.py
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
def ready(self):
import accounts.signals
init .py
default_app_config = 'accounts.apps.AccountsConfig'