大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用户 models.py
创新互联专注于企业成都全网营销推广、网站重做改版、德令哈网站定制设计、自适应品牌网站建设、H5网站设计、电子商务商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为德令哈等各大城市提供网站开发制作服务。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
这样,在模板中,无论是话题还是回复,简单的套一下就都可以方便的使用这个方法获取用户赞数了。