无法在我的应用程序models.py中将auth_user模型主键设置为外键

时间:2019-06-17 18:30:37

标签: python django

我正在尝试使用models.py创建一个博客应用程序,我想将auth_user模型主键设置为我的博客应用程序模型的外键。添加适当的代码后,出现以下错误?

 from django.db import models
 from django.conf import settings

 # Create your models here.
 class Post(models.Model):
   title=models.CharField(max_length=100)
   desc=models.TextField()
   date=models.DateTimeField(auto_now=True)
   author=models.ForeignKey("settings.AUTH_USER_MODEL",
                                         on_delete=models.CASCADE)

错误: blog.Post.author:(fields.E300)字段定义与模型“ User”的关系,该关系未安装或为抽象。 blog.Post.author:(fields.E307)声明了blog.Post.author字段时有一个对'blog.user'的惰性引用,但应用程序'blog'不提供模型'user'。

1 个答案:

答案 0 :(得分:1)

您不应该在这里使用字符串文字settings.AUTH_USER_MODEL [Django-doc]本身是一个包含用户模型名称的字符串,如文档中所指定:

  

AUTH_USER_MODEL

     

默认值:'auth.User'

     

用于表示用户的模型。 (..)

因此,您可以这样实现:

from django.db import models
from django.conf import settings

class Post(models.Model):
    title=models.CharField(max_length=100)
    desc=models.TextField()
    date=models.DateTimeField(auto_now=True)
    author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

这个想法是,您可以传递对类本身的引用,也可以使用限定名称作为字符串。但是'settings.AUTH_USER_MODEL'不是用户模型的限定名称。

或者,您可以使用get_user_model(..) [Django-doc]

from django.db import models
from django.contrib.auth import get_user_model

class Post(models.Model):
    title=models.CharField(max_length=100)
    desc=models.TextField()
    date=models.DateTimeField(auto_now=True)
    author=models.ForeignKey(get_user_model(), on_delete=models.CASCADE)