我有一个抽象的 Container 类,它允许派生模型保存一些内容块,例如图像、文本等,它们也是单独的模型。对于数据库整洁,我希望将这些模型的表标记为 content_block_image、content_block_text 等。
但是当我app_label = 'content_block'
在 Content 模型的 Meta 类中指定时,在 syncdb 期间出现错误:
content.event: 'content' 与模型 Content 具有 m2m 关系,该模型要么尚未安装,要么是抽象的。
我声明以下基类如下:
# 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 不仅仅是一个标签。
关于如何使用 Content 基类集的 app_label 来实现这一点的任何想法?