jqueryコードを使用して評価フォームフィールドを作成しようとしていますhere これまでのところうまくいきましたが、私がする必要があるのは私のオブジェクトに基づいたURLを渡すことです評価しようとしている。下記のコード$.post("URL TO GO HERE", {rating: value}, function(db)
を参照してください。 URLは/rating/object_id
のようになります。ここでobject_idは、評価したいオブジェクトのpkです。私はそれを使用できるようにオブジェクトIDを渡すための最良の方法は何ですか。最初にRatingFieldに渡してからStarWidgetに渡す必要がありますか?Django - オブジェクトをカスタムフォームフィールドに渡す
class StarWidget(widgets.Select):
"""
widget to show stars which the user can click on to rate
"""
class Media:
css = {
'all': ('css/ui.stars.css',)
}
js = ('js/ui.stars.js',)
def render(self, name, value, attrs=None):
output = super(StarWidget, self).render(name, value, attrs)
jquery = u"""
<div id="stars-rating" class="rating_section">
%s
<span id="caption"></span>
</div>
<script type="text/javascript">
$(function(){
$("#stars-rating").stars({
inputType: "select",
captionEl: $("#caption"),
cancelShow: false,
callback: function(ui, type, value)
{
// Hide Stars while AJAX connection is active
$("#stars-rating").hide();
$("#loader").show();
$.post("URL TO GO HERE", {rating: value}, function(db)
{
$("#loader").hide();
$("#stars-rating").show();
}, "json");
}
});
});
</script>
""" % (output)
return mark_safe(jquery)
class RatingField(forms.ChoiceField):
"""
rating field. changes the widget and sets the choices based on the model
"""
widget = StarWidget
def __init__(self, *args, **kwargs):
super(RatingField, self).__init__(*args, **kwargs)
self.label = "Rating:"
self.initial = 3
self.choices = Rating.RATING_CHOICES
返信いただきありがとうございます。あなたは私にこれを行う方法の例を教えてもらえますか? – John
私が不明なことは、フィールドのレンダリングメソッドによってレンダリングされる別々のテンプレートフラグメントを作成する方法です。 'フラグメントを作成する方法はわかっていますが、ウィジェットレンダリング関数によってレンダリングされる方法はわかりません。 – John
@John:Djangoブックの「テンプレートをレンダリングする」のセクションを参照してください。http://www.djangobook.com/en/beta/chapter04/ –