Python 如何与django一起添加两个sql列?
我有两个数据库表,story和storyvote,我想从中提取关于投票率最高的故事的信息。理论上应该是相当容易的,但我构建数据库表的方式可能会使它更加复杂(尽管仍然有可能更改其结构) 这两个数据库表的设计方法如下:Python 如何与django一起添加两个sql列?,python,sql,django,Python,Sql,Django,我有两个数据库表,story和storyvote,我想从中提取关于投票率最高的故事的信息。理论上应该是相当容易的,但我构建数据库表的方式可能会使它更加复杂(尽管仍然有可能更改其结构) 这两个数据库表的设计方法如下: class Story(models.Model): user = models.ForeignKey(User) date_added = models.DateTimeField(auto_now_add=True) date_modified = mod
class Story(models.Model):
user = models.ForeignKey(User)
date_added = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
location = models.CharField(max_length=100)
title = models.CharField(max_length=150)
description = models.CharField(blank=True, null=True, max_length=2000)
story_text = models.TextField()
def __unicode__(self):
return self.title
class StoryVote(models.Model):
votes = models.IntegerField()
story_vote_type = models.CharField(max_length=100)
story = models.ForeignKey(Story, related_name="votes")
def __unicode__(self):
return self.votes
正如您从上面的模型中看到的,我有一个名为“story\u vote\u type”的专栏,它是“up”或“down”。
例如,这样做不起作用:
for story in s:
print story.title + " has " + str(story.votes.all().count()) + " votes."
如果我过滤掉这个,我必须指定“story\u vote\u type=up”或“story\u vote\u type=down”,然后我不确定应该如何存储结果并将它们相加
我如何在这里为一个特定的故事添加上升票和下降票
到目前为止,我有一个将数字相加的代码:
for story in s:
... votes = story.votes.all()
... title = story.title
... specific_votes = 0
... for vote in votes:
... if (title == story.title and vote.story_vote_type == "up"):
... specific_votes = vote.votes + specific_votes
... else:
... specific_votes = vote.votes + specific_votes
... print story.title + " has " + str(specific_votes) + " votes."
感谢所有帮助。根据您的问题描述,您希望:
from django.db.models import Max, F
res = StoryVote.objects.annotate(max_votes=Max('votes')).filter(current_price=F('max_votes'))
这就是如何改进1以获得2:
res = StoryVote.objects.select_related('storyVote__story').annotate(max_votes=Max('votes')).filter(current_price=F('max_votes'))
至于为一个特定的故事添加上升票和下降票,我认为更好的方法是在
故事类型中为故事
同时添加上升票和下降票。我只是想一想,因为我不知道你的代码的设计。你刚才添加的代码段有没有出现错误?没有,它显示了正确的信息,所以我想我所需要做的就是以某种方式将其放入dict中,但是我真的不知道如何添加一个变量作为dict键,或者这是否是一个好的解决方案1.我真的不太理解你在回答中写的内容,尽管我当然建议你花时间写一个答复,我在api中读过关于annotate的内容,但即使是文档,我认为文档中的示例和用法都不清楚,而且用法很粗糙而且不直观哦!我的答案是你问题的第一行。无论如何,您想在dict中添加此信息,以将其传递到模板,并在HTML页面上显示它?好的。嗯,这只是一个尝试,我需要做什么,但如果这是一个更好的解决方案,那么我更感兴趣的是做得更好。我将重新访问文档进行注释,但我发现您必须阅读整个指南,才能从数据库中的一列中添加两个数字,这就是我提取数据并认为可以将其存储在dict中的原因。。但这可能是一个糟糕的解决方案