(fields.E300) Field defines a relation with model, which is either not installed, or is abstract.

23 ноября 2015 г. 6:59

Если возникает ошибка вроде этой: shop.Product.main_category: (fields.E300) Field defines a relation with model 'shop.Category', which is either not installed, or is abstract , то проверьте следующее:

1. Неправильное значение app_label у модели

Проверьте app_label у вашего класса модели - возможно, перепутаны названия приложений. При создании моделей я их не использую.

2. Использование внешнего ключа на абстрактную модель

Например:

class BaseModel(models.Model):
    ...

    class Meta:
        abstract = True


class ModelA(BaseModel):
    ...


class ModelB(BaseModel):
    ...


class MyModel(models.Model)
    my_field = models.ForeignKey(BaseModel)

Как видите поле my_field ссылается на базовую модель BaseModel, которая является абстрактной abstract = True. В Django так делать нельзя, мы можем ссылаться на реальную модель.

 

Возможно, вам нужно не только наследование моделей (как с классами ModelA и ModelB), но и удобное получение всех объектов базового класса и объектов классов наследуемых от базового. Тогда используйте приложение django-polymorphic.

Это приложение позволяет вернуть список объектов всех классов от наследуемого базового, например:

from polymorphic.models import PolymorphicModel

class Project(PolymorphicModel):
    topic = models.CharField(max_length=30)

class ArtProject(Project):
    artist = models.CharField(max_length=30)

class ResearchProject(Project):
    supervisor = models.CharField(max_length=30)

Теперь можно выполнить запрос, например:

Project.objects.all()

Вернёт:

[ <Project:         id 1, topic "Department Party">,
  <ArtProject:      id 2, topic "Painting with Tim", artist "T. Turner">,
  <ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]

То, что нам и нужно было.

Оцените статью

1 из 5 (всего 1 оценка)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Права на использование материала, расположенного на этой странице https://vivazzi.pro/it/model-is-either-not-installed-or-is-abstract/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="https://vivazzi.pro/it/model-is-either-not-installed-or-is-abstract/">https://vivazzi.pro/it/model-is-either-not-installed-or-is-abstract/</a>

Подробнее: Правила использования сайта

Комментариев: 1

Артём Мальцев
Артём Мальцев автор

01.12.2018 1:00 #

Спасибо, гостю (имя не указал) за дополнение к материалу статьи.

Ответить

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментрирования от своего имени, войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте