2011-12-16 25 views
1

私は複数の基準で評価したいコンテンツを持っています。
は、この種のモデルを想像:Django - 評価システムの表示とテンプレート

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

を設定した基準上のコンテンツを評価することができます。
今、私は今、どのように私はformsフォームセットを使用することができますテンプレートに

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> 
<!-- ... --> 

を表示&を実装しようとしています実際のレートを表示するには?
クリックした星からAjaxによって投稿される空のフォームをどのように描画できますか?
(私はjavascript/jQueryの部分を知っています)

答えて

1

ここで、フォームセットのポイントがわかりません。このレートはcriteriaオブジェクトを介して利用可能です。ContRateへの逆方向の外部キーは、CriteriaからContentまでとまったく同じ方法で使用します。

可能な限り、これはとして効率的にするために、あなたはおそらくビューに関連する評価を取得し、単一のデータ構造にそれらを一緒に持って帰りたいと思う:

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を表示することができます。

(最後のポイント:「基準」は複数で、単数形は、私はすべての基準のためのAjaxのポストのために少なくとも__ModelForm__を有していると考えていた「基準」:-)

+0

です。私はそれを知らなかった "基準"をありがとう:) –

関連する問題