我是编码的新手,目前已经实现了在线图书中的类似按钮 - Tango with django:
http://www.tangowithdjango.com/book17/chapters/ajax.html#add-a-like-button
然而,对于我的项目,我需要记录哪些用户喜欢什么,并确保他们只能喜欢一次项目(类似于instagram / facebook)。我在网上查看了其他相关问题,但发现其他初学者没有很好的答案。如果有人可以做一个易于理解的答案来帮助我和其他想要在未来实现同样目标的人,我们将不胜感激!
我目前的代码如下:
模型
class UserProject(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
date_created = models.DateTimeField(auto_now_add=True)
project_likes = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True)
视图
@login_required
def like_project(request):
proj_id = None
if request.method == 'GET':
proj_id = request.GET['project_id']
likes = 0
if proj_id:
proj = UserProject.objects.get(id=int(proj_id))
if proj:
likes = proj.project_likes + 1
proj.project_likes = likes
proj.save()
return HttpResponse(likes)
模板
<strong id="like_count">{{ project.project_likes }}</strong> likes
{% if user.is_authenticated %}
<button id="likes" data-projid="{{project.id}}" class="btn btn-danger-outline btn-sm" type="button"> <i class="fa fa-heart-o" aria-hidden="true"></i>
like
</button>
{% endif %}
URL
url(r'^like_project/$', views.like_project, name='like_project'),
的Ajax
$(document).ready(function() {
$('#likes').click(function(){
var projid;
projid = $(this).attr("data-projid");
$.get('/like_project/', {project_id: projid}, function(data){
$('#like_count').html(data);
$('#likes').hide();
});
});
});
答案 0 :(得分:0)
如果您想确保User
没有两次相同的UserProject
,那么您不能简单地在project_likes
字段中存储相似数量,但您应该创建一个单独的模型(例如UserLikes
)与ForeignKeys
到User
和UserProject
,例如用户喜欢UserProject
的时间。然后,您可以在UserProject
模型上创建一个函数来计算喜欢的数量。