首页 > 解决方案 > 在 django 中创建用户时自动创建配置文件对象的最佳方法

问题描述

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

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

标签: pythondjangodjango-modelsdjango-forms

解决方案


最好的方法是使用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()

然后注册signalsapps.py因为我们使用了@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


推荐阅读