在django中创建用户时自动创建配置文件对象的最佳方法



我想知道在django中创建相关Profile对象并将其分配给用户的最佳方式是什么。

有什么想法或链接可以查看吗?

最好的方法是使用signals

models.py

class Profile(models.Model):
user = models.OneToOneField(User,
primary_key=True,
on_delete=models.CASCADE,
help_text=_('User (Required).'),
)
[..]

创建一个单独的signals.py文件

from django.dispatch import receiver
from django.db.models.signals import pre_save, post_save
from .models import User, Profile

@receiver(post_save, sender=User, dispatch_uid='user.create_user_profile')
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)

@receiver(post_save, sender=User, dispatch_uid='user.save_user_profile')
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()

然后在apps.py中注册signals(因为我们使用了@receiver装饰器(

from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _

class AccountsConfig(AppConfig):
name = 'apps.accounts'
verbose_name = _('Accounts and Profiles')
def ready(self):
from . import signals

看看这个教程https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html

最新更新