2013-07-11 4 views
1

У меня есть класс модели Django, которые охватывают различные типы классов моделей, таких как:Альтернатива Джанго конкретное наследство

Content > (Audio, Video, Image) 

Я хочу, чтобы выполнять запросы на этой родительской модели, как Content.objects.filter() или Контента. objects.recent(). Как мне это сделать? В настоящее время я использую наследование конкретной модели django, которое, я полагаю, накладывает много внимания на производительность db, используя объединения для родительских классов. Я не могу использовать абстрактный класс, потому что это не позволит мне выполнять запросы в родительском классе. Вот мои определения моделей:

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

У меня был аналогичный сценарий, который я решил использовать с помощью внешнего имени Django Polymorphic, библиотека, казалось, работала плавно. В нескольких крупных проектах используется Django Polymorphic, включая Django-shop.

Ссылка: https://github.com/chrisglass/django_polymorphic

Не цитируйте меня на это, но я читал несколько источников в прошлом, которые упомянули, что django_polymorphic модели не имеют те же проблемы с производительностью, вызванные стандартной Django ORM бетона наследование.

Смежные вопросы