我的项目(问答网站,如 stackoverflow)坚持使用 Raiting 模型。我在 Django 中使用了 Tango 的这个 guid http://www.tangowithdjango.com/book17/chapters/ajax.html使用 ajax 添加类似按钮。然后我决定为喜欢和解决方案创建特殊模型。我不知道,我该怎么做。 首先,我尝试这样做
class Rating(models.Model):
user = models.ForeignKey(CustomUser)
answer = models.ForeignKey(Answer)
like = models.IntegerField(default=0)
resolve = models.IntegerField(default=0)
url(r'add_like/(?P<answer_pk>[0-9]+)/$', views.add_like, name='add_like'),
def add_like(request, answer_pk):
if request.POST:
ans_rait = Rating.objects.get(answer=answer_pk)
ans_rait.like += 1
ans_rait.save()
return redirect(reverse(get_question))
在我的问题页面中,我循环显示问题模型和答案
{% for answer in answers %}
<div class="container-fluid no-padding">
{{ answer.text }}
</div>
{% if user.is_authenticated %}
<form method = "post" action = "{% url 'add_like' %}">
<button class="btn btn-default" type="submit"> like | {{ answer.rating.like }}
</button>
</form>
{% endif %}
请至少理解在循环中添加like的逻辑。我尝试了很多东西,但不明白该怎么做
更新 我尝试了用户“混合”解决方案:
当我点击赞按钮时,出现异常:“赋值前引用了局部变量‘ans_rait’”。
当我在浏览器控制台中发布 js 脚本然后单击时,出现错误:
“未捕获的 ReferenceError:csrfToken 未定义”
“发布 http://127.0.0.1:8000/questions/add_like 500(内部服务器错误)”
我确定问题出在模型评级的创建上,我尝试像这样更新 View 代码:
def add_like(request):
if request.POST:
answer_pk = request.POST.get('answer_pk')
ans_author = Answer.objects.get(pk=answer_pk)
if Answer.objects.filter(answer=answer_pk) is None:
Rating.objects.create(user=ans_author.author,
answer=ans_author.id, like=1, resolve=0)
data = {'message': 'Success'}
else:
ans_rait = Answer.objects.get(answer=answer_pk)
ans_rait.like += 1
ans_rait.save()
data = {'message': 'Success'}
return JsonResponse(data)
url: url(r'add_like$', views.add_like, name='add_like'),
我有异常(exception):“答案匹配查询不存在”
我认为,我的逻辑很困惑,现在看来最好的解决方案是在 Answer 模型中添加“like”和“solved”极点,然后在 AnswerModel 中通过 likes 和 resolve 的计数来计算用户评分。现在我的模型看起来像这样:
class Answer(models.Model):
text = models.TextField()
date = models.DateTimeField(default=datetime.datetime.now)
author = models.ForeignKey(CustomUser)
question = models.ForeignKey(Question)
请您参考如下方法:
好的,所以您想在不使用 AJAX 的情况下“点赞”? 此行有一些问题:
<form method = "post" action = "{% url 'add_like' %}">
首先,您不需要等号周围的所有空格。并且您必须具体说明此投票的答案是什么,您必须将其放入 URL 中。所以:
<form method="post" action={% url 'add_like' answer.id %}">
这将生成 url:例如 add_like/23/,因此 id=23 的答案将被更新 https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url
