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

23 ноября 2015 г. 11: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 (всего 3 оценки)

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

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

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

Автор статьи

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

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

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

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

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

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

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

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

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

01.12.2018 6:00 #

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

Ответить

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

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

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

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

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

Попробуйте

Выберите валюту для отображения денежных единиц