Python Django-评级系统视图和;模板
我有一个我想根据多个标准对其进行评分的内容。Python Django-评级系统视图和;模板,python,django,django-forms,rating-system,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): us
想象一下这种模式:
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()
用户有一个显示内容的页面。在此页面中,他还可以根据标准集对内容进行评分 评级将使用Ajax完成。
现在我尝试实现视图&模板 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\u 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>
<!-- ... -->
{content.crit_set.all%}
-
{{crit}}
{%endfor%}
现在,我如何使用表单
表单集显示实际费率?我怎样才能从任何点击过的星星中画出一个空表单供Ajax发布?
(我知道javascript/jQuery部分)不确定表单集的要点是什么。通过
标准
对象,使用反向外键对合同
,可以获得所有费率,方法与从标准
到内容
完全相同
为了尽可能提高效率,您可能希望在视图中获得相关评级,并将它们合并到一个数据结构中:
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)
现在,您可以将标准
直接传递到模板中,然后在模板中迭代以显示每个标准的用户评分
(最后一点:“标准”是复数,单数是“标准”。-)不确定表单集的要点是什么。通过
标准
对象,使用反向外键对合同
,可以获得所有费率,方法与从标准
到内容
完全相同
为了尽可能提高效率,您可能希望在视图中获得相关评级,并将它们合并到一个数据结构中:
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”是复数,单数是“criteria”。-)我想为所有标准的Ajax帖子至少提供一个模型。谢谢你的“标准”,我不知道:)我在考虑至少为所有标准的Ajax帖子提供一个模型表单。谢谢你的“标准”,我不知道:)