在汇总 up/down 票并显示有序列表时被模型经理的错误行为难住了
Stumped by model manager's errant behavior when summing up/down votes and displaying an ordered list
这个可能有点棘手。
我有一个基本的网络应用程序,其中用户 post 有趣 URL,而 upvote/downvote best/worst 用户。我正在使用 Python 2.7,Django 1.5。问题陈述在最后以粗体显示。
在models.py中,我有以下几行(特别注意标有x[=40=的行]):
class Link(models.Model):
submitter = models.ForeignKey(User)
url = models.URLField("URL", max_length=250, blank=True)
x with_votes = LinkVoteCountManager()
def __unicode__(self):
return self.url
class LinkVoteCountManager(models.Manager):
def get_query_set(self):
x return super(LinkVoteCountManager, self).get_query_set().annotate(votes=Sum('vote__value')).order_by('-votes')
class Vote(models.Model):
voter = models.ForeignKey(User)
link = models.ForeignKey(Link)
x value = models.IntegerField(default=0)
下一个 views.py 我有:
class LinkListView(ListView):
model = Link
x queryset = Link.with_votes.all()
此设置执行以下操作:每当 URL 被提交或投票时,LinkVoteCountManager()
将其 up/down 票和 returns 总计排序的查询集相加.
现在,对于新提交的 link,LinkVoteCountManager()
的投票总和应为 0,因为 Vote
中的 value
被设置为 0(默认情况下)。 但是,我得到 NONE
新鲜提交的 link 票数,这完全打乱了选票的排序方式。 为什么 LinkVoteCountManager
对新的 links 表现不正确(但在 第一次投票后工作正常)。我该如何解决?请指教
新创建的链接可能没有 Vote
个对象。在这种情况下,带注释的 votes
属性将为 None
。我现在不知道解决此问题的直接方法,但我想您可以使用 F expressions.
来解决此问题
正如 Rene 的回答中所指出的,Vote
对象不存在,这导致投票计数的值为 None
。这当然是合乎逻辑的。我不会推翻这个逻辑,而是会重新设计我的排名算法以确保 "None" 票被计为“0”。
这个可能有点棘手。
我有一个基本的网络应用程序,其中用户 post 有趣 URL,而 upvote/downvote best/worst 用户。我正在使用 Python 2.7,Django 1.5。问题陈述在最后以粗体显示。
在models.py中,我有以下几行(特别注意标有x[=40=的行]):
class Link(models.Model):
submitter = models.ForeignKey(User)
url = models.URLField("URL", max_length=250, blank=True)
x with_votes = LinkVoteCountManager()
def __unicode__(self):
return self.url
class LinkVoteCountManager(models.Manager):
def get_query_set(self):
x return super(LinkVoteCountManager, self).get_query_set().annotate(votes=Sum('vote__value')).order_by('-votes')
class Vote(models.Model):
voter = models.ForeignKey(User)
link = models.ForeignKey(Link)
x value = models.IntegerField(default=0)
下一个 views.py 我有:
class LinkListView(ListView):
model = Link
x queryset = Link.with_votes.all()
此设置执行以下操作:每当 URL 被提交或投票时,LinkVoteCountManager()
将其 up/down 票和 returns 总计排序的查询集相加.
现在,对于新提交的 link,LinkVoteCountManager()
的投票总和应为 0,因为 Vote
中的 value
被设置为 0(默认情况下)。 但是,我得到 NONE
新鲜提交的 link 票数,这完全打乱了选票的排序方式。 为什么 LinkVoteCountManager
对新的 links 表现不正确(但在 第一次投票后工作正常)。我该如何解决?请指教
新创建的链接可能没有 Vote
个对象。在这种情况下,带注释的 votes
属性将为 None
。我现在不知道解决此问题的直接方法,但我想您可以使用 F expressions.
正如 Rene 的回答中所指出的,Vote
对象不存在,这导致投票计数的值为 None
。这当然是合乎逻辑的。我不会推翻这个逻辑,而是会重新设计我的排名算法以确保 "None" 票被计为“0”。