(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
01.12.2018 6:00 #
Спасибо, гостю (имя не указал) за дополнение к материалу статьи.
Ответить