我想提供一次投票的条目,从最新的未投票开始,向下移动到最老的未投票。如果所有参赛作品都已投票,我想显示一个随机投票的参赛作品。
在Entry模型中,我有一个投票布尔值;
模型
class Entry(models.Model):
text = models.CharField(max_length=15)
score = models.IntegerField(default=0)
pub_date = models.DateTimeField('date published')
voted = models.BooleanField(default=False)
def __unicode__(self):
return self.text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
在条目中:视图我定义了在表格和投票中显示的条目:
视图
def index(request):
context = {
'latest_entry_list': Entry.objects.order_by('-pub_date')[:10],
'high_entry_list': Entry.objects.order_by('-score')[:10],
'low_entry_list': Entry.objects.order_by('score')[:10],
'voting_entry_list': Entry.objects.filter(voted = False).order_by('-pub_date')[:1],
}
return render(request, 'entries/index.html', context);
'voting_entry_list':Entry.objects.filter(voteed = False).order_by(' - pub_date')[:1],
我把它称为投票列表,但它只包含显示投票的已排序条目。
这会照顾显示最新的未投票条目,我知道我需要检查投票是否为True,并且在这种情况下显示一个随机条目,但我似乎无法正确地执行此语法。我认为对voted = False的检查返回null可以让我做一个else函数来选择一个随机条目,但我似乎无法在我的代码中得到它。
有人可以提出建议吗?
答案 0 :(得分:1)
您可以为Entry
模型定义自定义模型管理器。
class EntryManager(models.Manager):
def unvoted_or_random(self):
unvoted_entries = self.filter(voted = False).order_by('-pub_date')
if unvoted_entries:
return unvoted_entries[:1]
else:
return self.all()[:1]
#或任何你想要的东西
然后在您的Entry
模型中,您可以执行类似的操作。
class Entry(models.Model):
...
objects = EntryManager()
然后您可以通过
在视图中获取所需的条目 Entry.objects.unvoted_or_random()
并将其传递给上下文..
我希望它有所帮助..