已正确转码的视频已标记为有效,而已停用或正在处理的视频则标记为无效。我有两个问题:
1)在数据库中显示此内容的最佳方法是什么。它是一个布尔字段active
,还是我遗漏的其他东西?
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()