Установить 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"

Вернуться на верх