我正在尝试使用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'。
答案 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)