python - 在 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()
然后注册signals
(apps.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
推荐阅读
- javascript - 无法在三个js中查看对象
- botkit - 使用 Botkit CMS 和 Botkit Web 设置错误
- html - 将鼠标悬停在图像上时更改文本,文本与图像位于不同的位置
- mysql - Mysql - 在块中插入数百万行
- angular - 获取动态控件Angular 6的选定值
- java - 是元素显示 android appium 自动化 java
- android - java.lang.RuntimeException:无法加载脚本。确保您正在运行 Metro 服务器(运行“react-native start”)或您的捆绑包
- javascript - async/await 的奇怪行为
- javascript - 关于 [a, b] = [b ,a] 时解构的 javascript 问题
- authentication - 如何控制 ASP.NET Core Cookie 身份验证的声明、票证和属性的序列化?