Django 2.1-将用户链接到相关模型
我正在创建一个Django项目,我想创建两种不同用户类型的配置文件作为一个单独的模型。他们将与登录用户建立OneToOneField关系Django 2.1-将用户链接到相关模型,django,django-models,django-2.1,Django,Django Models,Django 2.1,我正在创建一个Django项目,我想创建两种不同用户类型的配置文件作为一个单独的模型。他们将与登录用户建立OneToOneField关系 class UserMusician(models.Model): ... class UserFan(models.Model): ... 我见过两种不同的方法。一个,根据Django 2.1,文档显示传入用户模型,即: from django.contrib.auth.models import User class UserMusi
class UserMusician(models.Model):
...
class UserFan(models.Model):
...
我见过两种不同的方法。一个,根据Django 2.1,文档显示传入用户
模型,即:
from django.contrib.auth.models import User
class UserMusician(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
而其他示例,如Django book的两个勺子,则建议传递设置.AUTH_USER_MODEL
,即:
from django.conf import settings
class UserMusician(models.Model):
user = models.OneToOneField(settings.AUTH.USER.MODEL)
谁能告诉我两者的区别是什么,它们的优缺点是什么
我希望在创建用户帐户时,在数据库中生成这些配置文件(一个或另一个)
(作为“很高兴拥有”,我希望允许一个用户粉丝在以后决定切换时成为一个用户音乐家)Tje效果是相同的,无论您使用
User
或settings.AUTH\u User\u MODEL
来指定相关的模型。使用settings.AUTH\u USER\u MODEL
使您的应用程序更“可插拔”,这样它也可以用于使用不同用户模型的项目中。因此,如果您想将应用程序重新使用或发布到公共设置中,AUTH\u USER\u MODEL
无疑是您可以使用的最佳定义
如果要在创建用户
实例时自动创建配置文件,可以使用:
from django.db.models.signals import post_save
from models import UserMusician
from django.contrib.auth.models import User
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
UserMusician.objects.create(user=user)
post_save.connect(create_profile, sender=User)
这太棒了!非常感谢。接下来的两个问题:我想把
post_save
代码块也放在profiles/models.py文件中的类中,还是放在其他地方?如果我同时创建def create_musier_profile
和def create_fan_profile
,我如何防止在创建新用户帐户时创建这两个配置文件?只要确保至少执行一次post_save.connect()
,您就可以将代码放在任何地方,所以models.py
就可以了。您可以将任意多个函数连接到一个信号,但不知道如何确定要创建哪种配置文件(当然,您也可以在一个信号处理程序中处理这两种配置文件)