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