django具体继承的替代方案

时间:2013-07-11 10:56:50

标签: python django postgresql orm relational-database

我有一个Django模型类,它包含各种类型的模型类,如:

Content > (Audio, Video, Image)

我想对这个父模型执行查询,如Content.objects.filter()或Content.objects.recent()。我怎么来这个?目前我正在使用django的具体模型继承,我想通过使用父类的连接来强加大量的数据库性能。我不能使用抽象类,因为这不允许我在父类上执行查询。以下是我的模型定义:

class BaseContent(models.Model):
"""
    Concrete base model to encompass all the local and social content.
    We need a single queryset for all the content on the app.
"""
    title = models.CharField(_('title'), max_length=255, default='')
    description = models.TextField(_('description'), default='', blank=True)
    publisher = models.ForeignKey(settings.AUTH_USER_MODEL)

    allow_comments = models.BooleanField(default=False)
    is_public = models.BooleanField(default=True)

    created = AutoCreatedField(_('created'))

    objects = BaseContentManager()


class Video(BaseContent):
    ACTIVITY_ACTION = 'posted a video'

    UPLOAD_TO = 'video_files/%Y/%m/%d'
    PREVIEW_UPLOAD_TO = 'video_frames/%Y/%m/%d'

    video_file = models.FileField(_('video file'), upload_to=UPLOAD_TO)
    preview_frame = models.ImageField(
        _('Preview image'), upload_to=PREVIEW_UPLOAD_TO, blank=True,
        null=True)
    category = models.ForeignKey(VideoCategory, blank=True, null=True)
    num_plays = models.PositiveIntegerField(blank=True, default=0)
    num_downloads = models.PositiveIntegerField(blank=True, default=0)

提前致谢。

1 个答案:

答案 0 :(得分:1)

我有一个类似的场景,我使用一个名为Django Polymorphic的外部解决方案,该库似乎无缝地工作。一些主要项目使用Django Polymorphic,包括Django-shop。

链接: https://github.com/chrisglass/django_polymorphic

请不要在此引用我,但我已经阅读了一些过去提到django_polymorphic模型没有由标准Django ORM具体继承实现引起的相同性能问题的来源。