(fields.E301)字段定义了与模型“ auth.User”的关系,该关系已换出

Mer*_*alc 2 python django django-models

错误:blog.Post.author:(fields.E301)字段定义与已替换出的模型auth.User的关系。提示:将关系更新为指向“ settings.AUTH_USER_MODEL”。

我知道我需要将settings.AUTH_USER_MODEL替换为auth.User,但是由于某些原因,这样做会使我的博客无法显示。当我尝试从导航栏中查看博客时,路由是正确的,但是不再有内容。我也无法在Django管理员上登录或创建新用户。这些问题始于在帐户设置中设置AUTH_USER_MODEL。

博客/models.py

from django.db import models
from django.utils import timezone
from fitness_project import settings


class Post(models.Model):
    author = models.ForeignKey('auth.User', related_name='User')
    #author = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello',
    'blog',
    'membership',
    'accounts',
    'django_forms_bootstrap',
]

AUTH_USER_MODEL = 'accounts.User'

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'accounts.backends.EmailAuth',
)
Run Code Online (Sandbox Code Playgroud)

博客/admin.py

from django.contrib import admin
from .models import Post

admin.site.register(Post)
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 7

既然已经设置了AUTH_USER_MODEL = 'accounts.User',您的模型应该是:

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)

但是,为现有项目切换到自定义用户模型极其困难。如果您尝试执行此操作,则可能会发现删除数据库,删除迁移然后重新运行makemigrations和最为简单migrate