检查boolean / null以在Django sqlite3中排序

时间:2014-04-25 15:42:46

标签: django syntax sqlite null boolean

我想提供一次投票的条目,从最新的未投票开始,向下移动到最老的未投票。如果所有参赛作品都已投票,我想显示一个随机投票的参赛作品。

在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函数来选择一个随机条目,但我似乎无法在我的代码中得到它。

有人可以提出建议吗?

1 个答案:

答案 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()

并将其传递给上下文..

我希望它有所帮助..