我的需求是这样的,获取指定用户的获“赞”总数。

用户 models.py

class UserProfile(models.Model):
user = models.OneToOneField(User)

话题\回复 models.py

class Reply(models.Model):
content = models.TextField()
author = models.ForeignKey(User)
...
thanks = models.ManyToManyField(User,related_name='+')

每个reply就是一个的回复。每获得一个赞同那么thanks就多一对应关系

我想通过指定用户然后过滤出所有他的回复,然后获得他获得赞同的总数。

在views视图中我可以通过如下代码获取到一个人获得“赞”的总数

thanks_count = 0
for reply in Reply.objects.filter(author=user_profile.user):
thanks_count += reply.thanks.count()

然后在reply_thanks.html模板中我使用thanks_count就可以获得获赞总数了。

------

上面的方法没多久就发现了弊端。由于在贴子界面每个用户的头像旁边也需要显示获得的赞数,多个人的话,“author=user_profile.user”这个就用不了了。

所以需要一个新的,简单,可用性高的方法。我想过在UserProfile中添加赞的属性,或是在取出的回复的地方套层循环然后获取用户。但是都感觉麻烦,而且不给力,不知道怎么具体实现。

于是,我又开始翻看模板中的代码,看能不能找到点什么。我在index.html看到了“{{item.author.get_profile.slug}}”这个东西。话题可以获取到用户,我能不能通过用户获取到他获得的thanks数呢?

答案是肯定的。

Reply和UserPrefile的联系是通过User建立的。那么在模板中使用{{ item.author.userprofile.get_user_thanks }}就可以获取到UserPrefile中的方法了。值得注意的是那个userprefile是小写的。而且如果获取到了User,那么直接就可以获取到了userprefile。

确实是又有所收获。

接下来的定义get_user_thanks就简单了。在UserProfile中增加函数即可

class UserProfile(models.Model):
user = models.OneToOneField(User) def get_user_thanks(self):
thanks_count = 0
for reply in Reply.objects.filter(author=self.user):
thanks_count += reply.thanks.count()
return thanks_count

这样,在模板中,无论是话题还是回复,简单的套一下就都可以方便的使用这个方法获取用户赞数了。

Django查询的琐碎记录的更多相关文章

  1. Django查询数据库性能优化

    现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...

  2. django查询操作

    查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下 ...

  3. Atitit 分区后的查询  mysql分区记录的流程与原理

    Atitit 分区后的查询  mysql分区记录的流程与原理 1.1.1. ibd是MySQL数据文件.索引文件1 1.2. 已经又数据了,如何分区? 给已有的表加上分区 ]1 1.3. 分成4个区, ...

  4. mysql 查询一条记录的下一条和上一条记录

    如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...

  5. DNS添加/修改/查询/删除A记录

    #查询DNS可用类 Get-WmiObject -Namespace root\MicrosoftDNS -List #查询所有资源记录 $mydns = [WMIClass]"ROOT\M ...

  6. 让 Python 的1、数据库查询返回字典记录--- 2、利用zip函数将两个列表(list)组成字典(dict)

    让 Python 的数据库查询返回字典记录: https://yanbin.blog/python-database-query-return-dictionary-result/#more-9179 ...

  7. django查询数据库无法过滤月份的解决

    我试过,当settings里的:USE_TZ = False时也可以查询,但是数据库里的时间就会显示错的 解决方法是可以再终端输入 mysql_tzinfo_to_sql /usr/share/zon ...

  8. Hibernate的条件查询的几种方式+查询所有的记录

    条件查询 . 第一种,用?占位符,如: //登录(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Sess ...

  9. Django查询SQL语句

    Django查询SQL语句 # 1 res=models.Book.objects.all() # print(res)#<QuerySet [<Book: Book object> ...

随机推荐

  1. 关闭 MsMpEng.exe

    MsMpEng.exe是Windows Defender 自动保护服务的核心引擎. 系统是win8.1 最近发现MsMpEng.exe是任务管理器里面最占内存的一个程序,且无法强制结束程序.偶然发现一 ...

  2. 利用Ring Buffer在SQL Server 2008中进行连接故障排除

    原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...

  3. Codefoces 432 C. Prime Swaps

    哥德巴赫猜想: 任一大于2的偶数,都可表示成两个素数之和. 任一大于5的整数都可写成三个质数之和. 贪心取尽可能大的素数..... C. Prime Swaps time limit per test ...

  4. C++ tree(1)

    建立与基本操作 .有关二叉树的相关概念,这里不再赘述,假设不了解二叉树相关概念,建议先学习数据结构中的二叉树的知识点 准备数据 定义二叉树结构操作中须要用到的变量及数据等. #define MAXLE ...

  5. 如何在SSIS的脚本组件中访问变量

    原文:如何在SSIS的脚本组件中访问变量 这是一个小问题,我们在SSIS的设计中很多地方都会用到变量,我习惯性地将"变量"和"表达式"称为SSIS的灵魂,虽然不 ...

  6. git - 简明指南(转)

    安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹,打开,然后执行  git init 以创建新的 git 仓库. 检出仓库 执行 ...

  7. 中国澳门sinox很多平台CAD制图、PCB电路板、IC我知道了、HDL硬件描述语言叙述、电路仿真和设计软件,元素分析表

    中国澳门sinox很多平台CAD制图.PCB电路板.IC我知道了.HDL硬件描述语言叙述.电路仿真和设计软件,元素分析表,可打开眼世界. 最近的研究sinox执行windows版protel,powe ...

  8. 新秀系列C/C++经典问题(四)

    一个主题:查找最小的k个元素 输入n个整数.输出当中最小的k个. . 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数. 仅仅是这样的思路的时间复杂度为O(n ...

  9. poj 2565 Ants (KM+思维)

    Ants Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4125   Accepted: 1258   Special Ju ...

  10. ENode简介与各种资源汇总

    ENode简介与各种资源汇总 ENode是什么 ENode是一个.NET平台开源的应用开发框架,为开发人员提供了一套完整的基于DDD+CQRS+ES+(in-memory)+EDA架构风格的解决方案. ...