处理活动与非活动视频

时间:2011-08-16 12:52:39

标签: django django-models

已正确转码的视频已标记为有效,而已停用或正在处理的视频则标记为无效。我有两个问题:

1)在数据库中显示此内容的最佳方法是什么。它是一个布尔字段active,还是我遗漏的其他东西?

2)处理视频搜索等的最佳方法是什么,因为非活动视频永远不会出现?是否有一种简单的方法可以在模型定义中设置查询,以便只显示活动视频?

处理此活动与非活动案例的最佳方法的任何解释都将非常有用。谢谢。

2 个答案:

答案 0 :(得分:2)

处理此问题的典型方法是在视频模型上使用布尔字段,然后使用新管理器仅返回活动视频。您甚至可以将此管理器设为默认管理器,以便在您明确要求使用非活动视频时使用它。

这是草图:

class InactiveManager(models.Manager):
    def get_query_set(self):
        return super(InactiveManager, self).get_query_set().filter(active=False)

class ActiveManager(models.Manager):
    def get_query_set(self):
        return super(ActiveManager, self).get_query_set().filter(active=True)

class Video(models.Model):
    title = models.CharField(max_length=200)
    active = models.BooleanField()

    # Use all_videos to get absolutely everything.
    all_videos = models.Manager()
    objects = ActiveManager()
    inactive = InactiveManager()

答案 1 :(得分:0)

作为内德的答案,但使用“ get_queryset”而不是“ get_query_set”。

花了两个小时找出'get_query_set'无效。

不幸的是,由于我没有50分的声​​誉,我不能将其作为对内德回答的评论。

class InactiveManager(models.Manager):
    def get_queryset(self):
        return super(InactiveManager, self).get_queryset().filter(active=False)

class ActiveManager(models.Manager):
    def get_queryset(self):
        return super(ActiveManager, self).get_queryset().filter(active=True)

class Video(models.Model):
    title = models.CharField(max_length=200)
    active = models.BooleanField()

    # Use all_videos to get absolutely everything.
    all_videos = models.Manager()
    objects = ActiveManager()
    inactive = InactiveManager()