Невозможно установить первичный ключ модели auth_user в качестве внешнего ключа в моем приложении models.py - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь создать приложение блога с 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) Поле определяет отношение с моделью «Пользователь», которое либо не установлено, либо является абстрактным. blog.Post.author: (fields.E307) Поле blog.Post.author было объявлено с ленивой ссылкой на blog.user, но приложение «blog» не предоставляет модель «user».

1 Ответ

1 голос
/ 17 июня 2019

Вы должны не использовать строковый литерал здесь, 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(<b>settings.AUTH_USER_MODEL</b>, on_delete=models.CASCADE)

Идея состоит в том, что вы либо передаете ссылку на сам класс, либо используете квалифицированное имя в качестве строки для него. Но 'settings.AUTH_USER_MODEL' - это , а не квалифицированное имя модели пользователя.

В качестве альтернативы вы можете использовать get_user_model(..) [Django-doc] :

from django.db import models
from django.contrib.auth import <b>get_user_model</b>

class Post(models.Model):
    title=models.CharField(max_length=100)
    desc=models.TextField()
    date=models.DateTimeField(auto_now=True)
    author=models.ForeignKey(<b>get_user_model()</b>, on_delete=models.CASCADE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...