У меня есть абстрактный класс Container, который позволяет производным моделям содержать некоторые блоки контента, такие как изображения, текст и т. Д., Которые также являются отдельными моделями.Для чистоты базы данных я хочу, чтобы таблицы для этих моделей были помечены как content_block_image, content_block_text и т. Д.
Но когда я указываю app_label = 'content_block'
в мета-классе модели содержимого, я получаю сообщение об ошибке во время syncdb:
content.event: «content» имеет отношение m2m к модели Content, которая либо не была установлена, либо является абстрактной.
Я объявляю следующие базовые классы следующим образом:
# base.py
class Content(models.Model):
tags = models.TextField(_('tags'), blank=True)
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType,
related_name='%(class)s_content_set')
container_type = models.ForeignKey(ContentType)
container_id = models.PositiveIntegerField()
container = generic.GenericForeignKey('container_type', 'container_id')
class Meta:
app_label = 'content_block'
class Container(models.Model):
content_type = models.ForeignKey(ContentType,
related_name='%(class)s_container_set')
content = generic.GenericRelation('Content',
content_type_field='container_type',
object_id_field='container_id')
class Meta:
abstract = True
Затем в моих моделях я объявляю модели, которые я называю контейнером:
# models.py
class Event(Container):
title = models.CharField(max_length=100)
start = models.DateTimeField()
end = models.DateTimeField()
Если я удаляю, app_label
syncdb запускается без проблем.Кажется, что app_label - это не просто ярлык.
Есть какие-нибудь идеи о том, как добиться этого с помощью app_label для набора базовых классов контента?