Django 2.1 - 将用户链接到相关模型

Django 2.1 - linking user to related model

我正在创建一个 Django 项目,我想创建两个不同用户类型的配置文件作为一个单独的模型。他们将与登录用户建立 OneToOneField 关系。

class UserMusician(models.Model):
    ...

class UserFan(models.Model):
    ...

我见过两种不同的方法。一,根据 Django 2.1 文档显示传入 User 模型,即:

from django.contrib.auth.models import User

class UserMusician(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

而其他示例,例如 Two Scoops of Django 一书,建议传递 settings.AUTH_USER_MODEL,即:

from django.conf import settings

class UserMusician(models.Model):
    user = models.OneToOneField(settings.AUTH.USER.MODEL)

谁能告诉我有什么区别,两者的优缺点是什么?

我希望在创建用户帐户时在数据库中生成这些配置文件,一个或另一个。

(作为 'nice to have',我想允许 UserFan 在以后决定转换时成为 UserMusician)

不管你用User还是settings.AUTH_USER_MODEL指定相关型号,效果都是一样的。使用 settings.AUTH_USER_MODEL 让您的应用更 "pluggable" 以便它也可以用于使用不同用户模型的项目。因此,如果您想重用或发布您的应用程序 public settings.AUTH_USER_MODEL 肯定是您可以使用的最佳定义。

如果您想在创建 User 实例时自动创建配置文件,您可以使用 Django's post_save signal 来实现:

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)