需要帮助制作Django + Ajax,如按钮

时间:2016-07-28 07:33:28

标签: jquery python ajax django

我是编码的新手,目前已经实现了在线图书中的类似按钮 - 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();
    });
});
});

1 个答案:

答案 0 :(得分:0)

如果您想确保User没有两次相同的UserProject,那么您不能简单地在project_likes字段中存储相似数量,但您应该创建一个单独的模型(例如UserLikes)与ForeignKeysUserUserProject,例如用户喜欢UserProject的时间。然后,您可以在UserProject模型上创建一个函数来计算喜欢的数量。