我正在研究一个Django项目,我正在尝试做这样的事情,以确保无论用户模型设置如何,我的模型都能正常工作。
from django.contrib.auth import get_user_model
class Item(models.Model):
title = models.CharField(max_length=100, )
description = models.TextField()
seller = models.ForeignKey(get_user_model())
然而,当我这样做时,导致错误告诉我无法访问用户模型,所以我不得不将其更改为
from django.conf import settings
class Item(models.Model):
title = models.CharField(max_length=100, )
description = models.TextField()
seller = models.ForeignKey(settings.AUTH_USER_MODEL)
这很好但我以为我过去使用第一种方法做了这个。唯一不同的是,我正在使用自定义用户模型。他们似乎都对我做同样的事情所以为什么我必须使用第二种方法? get_user_model()不能与默认用户一起使用吗?
答案 0 :(得分:1)
这是django中get_user_model()的源代码:
def get_user_model():
"""
Returns the User model that is active in this project.
"""
from django.db.models import get_model
try:
app_label, model_name = settings.AUTH_USER_MODEL.split('.')
except ValueError:
raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
user_model = get_model(app_label, model_name)
if user_model is None:
raise ImproperlyConfigured("AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL)
return user_model
正如您所看到的,它会像您一样从设置中提取AUTH_USER_MODEL变量,但会提取app_label和用户类本身。如果它不起作用,您应该在完成此调用时看到终端中的两个错误之一。
答案 1 :(得分:1)
我认为你的答案在于Django source。这取决于你的设置会发生什么。 Older versions可能会有所不同。