Django查询的琐碎记录
我的需求是这样的,获取指定用户的获“赞”总数。
用户 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查询的琐碎记录的更多相关文章
- Django查询数据库性能优化
现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...
- django查询操作
查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下 ...
- Atitit 分区后的查询 mysql分区记录的流程与原理
Atitit 分区后的查询 mysql分区记录的流程与原理 1.1.1. ibd是MySQL数据文件.索引文件1 1.2. 已经又数据了,如何分区? 给已有的表加上分区 ]1 1.3. 分成4个区, ...
- mysql 查询一条记录的下一条和上一条记录
如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...
- DNS添加/修改/查询/删除A记录
#查询DNS可用类 Get-WmiObject -Namespace root\MicrosoftDNS -List #查询所有资源记录 $mydns = [WMIClass]"ROOT\M ...
- 让 Python 的1、数据库查询返回字典记录--- 2、利用zip函数将两个列表(list)组成字典(dict)
让 Python 的数据库查询返回字典记录: https://yanbin.blog/python-database-query-return-dictionary-result/#more-9179 ...
- django查询数据库无法过滤月份的解决
我试过,当settings里的:USE_TZ = False时也可以查询,但是数据库里的时间就会显示错的 解决方法是可以再终端输入 mysql_tzinfo_to_sql /usr/share/zon ...
- Hibernate的条件查询的几种方式+查询所有的记录
条件查询 . 第一种,用?占位符,如: //登录(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Sess ...
- Django查询SQL语句
Django查询SQL语句 # 1 res=models.Book.objects.all() # print(res)#<QuerySet [<Book: Book object> ...
随机推荐
- 利用Ring Buffer在SQL Server 2008中进行连接故障排除
原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...
- POJ1149 PIGS 【最大流量】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16555 Accepted: 7416 Description ...
- 分析Cocos2d-x横版ACT手游源 1、登录
我自己的游戏代码 因为 游戏源 盯着外面的 我们能够能够理解 /******************************************************************** ...
- (大数据工程师学习路径)第二步 Vim编辑器----查找替换
一.字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换 ...
- Java里泛型有什么作用
1 泛型赋予了类型參数式多态的能力 2 泛型的第一个优点是编译时的严格类型检查,提高了程序的安全性和健壮性,这是集合框架最重要的特点. 3 泛型消除了绝大多数的类型转换.假设没有泛型,当你使用集合框架 ...
- WPF六个控制概述
在线演示:http://v.youku.com/v_show/id_XNzA0NjU1Mjk2.html 清晰版视频+代码下载:http://115.com/lb/5lbcftnrfo9s 一.简单介 ...
- Visual Prolog 的 Web 专家系统 (6)
保存用户响应询价.作为进一步推理的条件 或GOAL段开始.最初的一句是write_startform() write_startform():- write("<form action ...
- 一个sql的优化
原文:一个sql的优化 目的:为了查询某天某个服务器上的登录id的个数 刚开始编写的sql: select count(a.mac) logusers from Log_MacLogin_All ...
- How to install IIS 7.5 on Windows 7 using the Command Line
原文 How to install IIS 7.5 on Windows 7 using the Command Line On Windows Vista, to install IIS 7.0 f ...
- 新秀系列C/C++经典问题(四)
一个主题:查找最小的k个元素 输入n个整数.输出当中最小的k个. . 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数. 仅仅是这样的思路的时间复杂度为O(n ...