Skip to main content
 首页 » 编程设计

python之评级模型 Django

2025年05月04日27daizhj

我的项目(问答网站,如 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