python - Django - 评级系统 View 和模板

标签 python django django-forms rating-system

我想根据多个标准对某个内容进行评分。
想象一下这种模型:

class Content(models.Model):
  name = models.CharField(max_length=50)

class Criterion(models.Model):
  name = models.CharField(max_length=50)
  content = models.ForeignKey(Content)

class ContRate(models.Model):
  user = models.ForeignKey(User, help_text="Who rated ?")
  crit = models.ForeignKey(Criterion)
  rate = models.DecimalField()

用户有一个显示内容的页面。
在此页面上,他还可以根据设置的标准对内容进行评分

Rating Criteria

评级将通过 Ajax 完成。
现在我正在尝试实现 View 和模板

view.py

#...
def viewcont(request, content_id):
  """The user can view a content & rate it"""
  content = get_object_or_404(Content, pk=content_id)
  RateFormSet = modelformset_factory(ContRate)
  formset = RateFormSet(queryset=ContRate.objects.filter(content=content, user=request.user))
  objs = {
    'content': content,
    'forms': formset,
  }
  return render_to_response('content/content_detail.html', objs
  , context_instance=RequestContext(request)
  )
#...

content_detail.html

<!-- ... -->
<div id="rating">
  <ul>
{% for crit in content.crit_set.all %}
    <li>
      {{ crit }}
      <div class="rateit"
        data-rateit-value="the_actual_rating_if_already_there"
        data-rateit-ispreset="true"
        crit-id="{{ crit.id }}"></div>
    </li>
{% endfor %}
  </ul>
</div>
<!-- ... -->

现在如何使用 forms 表单集来显示实际费率?
我怎样才能从任何点击的星星上绘制一个由 Ajax 发布的空表单?
(我知道 javascript/jQuery 部分)

最佳答案

不确定表单集在这里的意义是什么。所有费率均可通过 criteria 对象获得,使用 ContRate 的反向外键,方式与您在 Criteria 中所做的完全相同到内容

为了使其尽可能高效,您可能希望在 View 中获取相关评级并将它们组合到一个数据结构中:

content = get_object_or_404(Content, pk=content_id)
criteria = content.criteria_set.all()
user_ratings = ContRate.objects.filter(content=content, user=request.user)
ratings_dict = dict((c.crit_id, c.rate) for c in user_ratings)
for crit in criteria:
    crit.user_rating = ratings_dict.get(crit.id)

现在您可以将criteria直接传递到您的模板,然后您可以迭代它以显示每个条件的user_ rating

(最后一点:“criteria”是复数,单数是“criterion”。:-)

关于python - Django - 评级系统 View 和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533461/

相关文章:

python - 无法在 Windows XP Professional 中安装 Python 3.5

python - 如何在 django-rest-framework 中将默认值 'pk' 更改为 'id' 或其他值?

python - 我可以触发并忘记提交到线程池的可调用对象吗?

html - 我使用 django 创建了一个博客,想知道我们是否需要将文章存储为 html 格式?

python - Django MySQL 条目唯一 ID 或 pk

Django-Weasyprint 图像问题

python - 当直接在类上调用描述符时,为什么描述符会变得无效?

django - 如何将表单值传递给另一个 View

python - Django 模型选择字段 - 取决于其他字段的选择

python - Django 模型形式 - 多个模型