Django 为什么我必须以这种方式引用用户模型

Django 为什么我必须以这种方式引用用户模型,django,Django,我在做一个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_mo

我在做一个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()是否与默认用户不兼容?

这是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_标签和用户类本身一样。如果它不起作用,您应该在通话结束时在终端中看到两个错误中的一个。

我认为您的答案在于。这取决于您的设置以及发生的情况。可能会有点不同