【发布时间】:2016-04-29 12:20:09
【问题描述】:
我正在尝试创建自己的点赞按钮,但遇到了一些问题。
代码在 Django 中使用 Ajax,我收到一条错误消息,但我不知道出了什么问题。
这里是代码,大部分灵感来自this post。
article\models.py
class Article(models.Model):
user = models.ForeignKey(User, default='1')
titre = models.CharField(max_length=100, unique=True)
[... some unrelated models ...]
slug = models.SlugField(max_length=40)
likes = models.ManyToManyField(User, related_name="likes")
def __str__(self):
return self.titre
@property
def total_likes(self):
return self.likes.count()
文章\urls.py
url(r'^like/$', views.like_button, name='like_button'),
article\views.py
@login_required(login_url='/user')
def like_button(request):
if request.method == 'POST':
user = request.user
id = request.POST.get('pk', None)
article = get_object_or_404(Article, pk=id)
if article.likes.filter(id=user.id).exists():
article.likes.remove(user)
else:
article.likes.add(user)
context = {'likes_count': article.total_likes}
return HttpResponse(json.dumps(context), content_type='application/json')
(如您所见,我正在尝试获取文章 ID,而不是 slug)
article.html
<div>
{% for a in article %}
[... some unrelated html ...]
<input type="button" class="like" name="{{ a.id }}" value="Like" />
<p>count : {{ a.total_likes }}</p>
{% endfor %}
</div>
<script>
$('.like').click(function(){
$.ajax({
type: "POST",
url: "{% url 'like_button' %}",
data: {'pk': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function(response) {
alert('Company likes count is now ' + response.count_likes);
},
error: function(rs, e) {
alert(rs.responseText); #No Article matches the given query.
}
});
})
</script>
错误表明没有文章与给定的查询匹配。
为了完成这项工作,我应该改变什么?
【问题讨论】:
-
raised an error没有向我们提供任何信息来帮助您。图片也不是很有用。您需要编辑您的问题以告诉我们您有什么错误。 -
您在和
id上使用点击事件,但您有多个按钮,因此id不起作用。你需要使用class:w3schools.com/jquery/jquery_selectors.asp -
@ShangWang 对问题进行了一些更改,它说没有文章与给定的查询匹配。
-
这意味着您传入的
pk与数据库中的任何记录都不匹配。你可以在你的views.py中做print id看看id你得到了什么。 -
@ShangWang NameError : name 'id' 未定义。那么如何获取文章ID呢?