Python Django评级模型

Python Django评级模型,python,django,Python,Django,我坚持在我的项目中使用Raiting模型(问答网站,如stackoverflow)。我使用这个来自Tango和Django的guid,用ajax添加like按钮。然后我决定为喜欢和解决方案创建一个特殊的模型。我不知道,我怎么能做到。 首先,我试着这样做 class Rating(models.Model): user = models.ForeignKey(CustomUser) answer = models.ForeignKey(Answer) like = mod

我坚持在我的项目中使用Raiting模型(问答网站,如stackoverflow)。我使用这个来自Tango和Django的guid,用ajax添加like按钮。然后我决定为喜欢和解决方案创建一个特殊的模型。我不知道,我怎么能做到。 首先,我试着这样做

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))
我有一个例外:“答案匹配查询不存在”

我想,我在逻辑上搞糊涂了,现在看来最好的解决方案是在回答模型中添加“喜欢”和“解决”极点,然后在回答模型中通过喜欢和解决的数量来计算用户评分。现在我的模型看起来是这样的:

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 %}">

你能列出你试过的东西吗?我认为本教程非常清楚如何做到这一点:我在guid中做了所有的事情,但我不喜欢它在循环中的工作方式。在重新加载页面后,计数器在同一按钮上更新一次,在下一次更新时,我的答案在重新加载后改变位置。我还没有研究过js,首先尝试只在django中构建这个解决方案。我认为“喜欢”的特殊模型会更好,如果我们发送数据,我们需要方法帖子,不是吗?谢谢,它可以工作,但我不知道如何更新视图?在我的db rating表中,所有列都是空的,当我像我的模型一样尝试+=1时,出现错误“rating matching query不存在”。我认为viewchange
和change
ans\u rait=Rating.objects.get(answer=answer\u pk)
有问题,改为
ans\u rait=Rating.objects.get(pk=answer\u pk)
如果answer.objects.filter(answer=answer\u pk)为None:Rating.objects.create(user=answer.author,answer=answer.id,like=1,resolve=0)
答案。作者是CustomUser模型的外键,由于注释的格式问题,我无法完全理解-在原始问题的底部询问您的新问题,我将尽力在现有答案的底部添加答案。Hybrid,我更新我的答案,感谢您的帮助,我真的陷入了这个问题。评分和喜好是我的项目的最后一个大问题,我无法解决这个问题,比如4-5天,也许我不能完全向你们解释我的问题,如果你们不明白,我会像你们想感谢的那样更新问题!我会在其他解决方案后尝试。JS对我来说很难,我没有研究过它,yetI尝试过你的解决方案,我有一个例外:“分配前引用了局部变量‘ans_rait’”我在控制台中发布JS脚本,看到这个:“未捕获的引用错误:csrfToken未定义”post 127.0.0.1:8000/问题/add_like 500(内部服务器错误)“我认为模型评级有问题,db collumns是空的,我们无法获得数据,我尝试过这样更新代码:
如果回答.objects.filter(回答=Answer\u pk)为None:Rating.objects.create(回答=Answer.id,like=1,resolve=0)
可能更容易在我的
回答中添加“喜欢”和“解析”
model?混合,我更新我的答案,谢谢你的帮助,我真的陷入了这个问题。评分和喜好是我项目的最后一个大问题,我无法解决这个问题,比如4-5天,也许我不能完全向你解释我的问题,如果你不明白,我会像你想的那样更新这个问题。这不管用。如果Rating.DoesNotExist,则它仍会尝试.like+1和.save(),即使没有ANSU rait。您应该在块中返回JsonResponse,谢谢。使用了if条件而不是返回,但这应该可以修复它。
<form method = "post" action = "{% url 'add_like' %}">
<form class="_addLike" data-answer-pk="{{ answer.pk }}" method="post" action="{% url 'add_like' %}">
from django.http import JsonResponse
def add_like(request):
    if request.POST:
        data = {'message': 'Success'}
        answer_pk = request.POST.get('answer_pk')

        try:
            ans_rait = Rating.objects.get(answer=answer_pk)
        except Rating.DoesNotExist:
            data = {'message': 'Invalid rating obj'}

        if ans_rait:
            ans_rait.like += 1
            ans_rait.save()

    return JsonResponse(data)
<form method = "post" action = "{% url 'add_like' %}">
<form method="post" action={% url 'add_like' answer.id %}">