【问题标题】:how to create a like button, which a user can only like once in django website?如何创建一个用户只能在 django 网站上点赞一次的点赞按钮?
【发布时间】:2019-04-29 05:23:31
【问题描述】:

我想创建一个功能齐全的按钮,当用户只能喜欢一次时。

我已经创建了一个赞按钮,但这不是我想要的,我当前的赞按钮可以被用户喜欢多次。

enter code here
##models.py

class Images(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
              related_name='images_created', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True, null=True,         
               blank=True)
    message_likes = models.IntegerField(default=0)
    objects = InheritanceManager()

##views.py

def like_treasure(request):
    treasure_id = request.POST.get('treasure_id', None)
    message_likes = 0
    if (treasure_id):
        treasure = Postsms.objects.get(id=int(treasure_id))
        if treasure is not None:
            message_likes = treasure.message_likes + 1
            treasure.message_likes = message_likes
            treasure.save()
    return HttpResponse(message_likes)


## $
$('button').on('click', function(event){
    event.preventDefault();
    var element = $(this);
    $.ajax({
    url : '/like_treasure/',
    type : 'POST',
    data : { treasure_id : element.attr("data-id")},
    success : function(response){
        element.html(' ' + response);
 }

});

});

##html

 <button style="background-color: red" id ="likes" data-id="{{foo.id}}"
   class="btn btn-mini  glyphicon glyphicon-heart"
   type="button" >
   {% if foo.message_likes > 0 %} {{ foo.message_likes }} {% endif %}

【问题讨论】:

  • 这是在为MVCE哭泣
  • 你可以使用django-secretballot

标签: python jquery ajax django django-models


【解决方案1】:

在图像模型中采用布尔字段而不是 IntegerField。因此,用户只能喜欢一次图像。休息,用布尔字段在前端处理它。

【讨论】:

  • 如何在前端处理它
  • {% if not foo.like %}
  • 如果布尔检查之类的图像为 True,则禁用按钮。
  • 错误答案,因为我想将所有用户喜欢存储在数据库中,布尔值只有真或假,我想计算所有喜欢,..
  • 每个图像都有单独的对象。在 Image 模型中尝试 ManytoManyField to User。
猜你喜欢
  • 2012-06-26
  • 2021-09-18
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多