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)
我正在创建一个 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)