Установить Django Taggit внутри другого приложения?
Я использую Django taggit. Первоначально я создал приложение tags
и немного подправил taggit. Это не очень много кода и не заслуживает собственного приложения (на мой взгляд), поэтому я хочу перенести код tags
в другое приложение (назовем его content
).
from content.utils import slugifier
class Tag(TagBase):
"""This is a replacement class for the Taggit "Tag" class"""
class Meta:
verbose_name = _("tag")
verbose_name_plural = _("tags")
app_label = "tags"
def slugify(self, tag, i=None):
slug = slugifier(tag)
if i is not None:
slug += "-%d" % i
return slug
class TaggedItem(GenericTaggedItemBase, TaggedItemBase):
# This tag field comes from TaggedItemBase - CustomTag overrides Tag
tag = models.ForeignKey(
Tag,
on_delete=models.CASCADE,
related_name="%(app_label)s_%(class)s_items",
)
class Meta:
verbose_name = _("tagged item")
verbose_name_plural = _("tagged items")
app_label = "tags"
index_together = [["content_type", "object_id"]]
unique_together = [["content_type", "object_id", "tag"]]
class Content(PolymorphicModel):
...
tags = TaggableManager(through=TaggedItem, blank=True)
Моя проблема
Когда я перехожу к makemigrations
, я получаю эту ошибку:
(venv) C:\Users\Jarad\Documents\PyCharm\knowledgetack>python manage.py makemigrations
SystemCheckError: System check identified some issues:
ERRORS:
content.Content.tags: (fields.E300) Field defines a relation with model 'Tag', which is either not installed, or is abstract.
Я думаю, что это сообщение об ошибке довольно понятное и хорошее. Мое приложение content
имеет модель с именем Content
, которая имеет поле с именем tags
. Поле определяет связь с моделью с именем 'Tag'
... но почему оно не устанавливается? Код для модели Tag
находится буквально прямо над моделью Content
?
Примечание: У меня нет taggit
в списке INSTALLED_APPS
, потому что я настраиваю taggit и следую советам на этой странице :
Примечание: Включение 'taggit' в список settings.py INSTALLED_APPS создаст создать модели по умолчанию django-taggit и "through model". Если вы хотите использовать свои собственные модели, вам необходимо удалить 'taggit' из списка INSTALLED_APPS в settings.py.
.
Мой вопрос
Что мне нужно изменить?
Мне нужно было изменить app_label = "tags"
.
Вы можете удалить его или изменить его на фактическое приложение, в которое вы перемещаете модели тегов. Например: app_label = "content"