2010-12-06 10 views
0

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 

答えて

0

私はビルトインフィールドこの方法をやっている知っているが、それは実際にPythonのコードにHTMLやJSを大量に埋め込むことをお勧めではありません。代わりに、フィールドのrenderメソッドでレンダリングされる別個のテンプレートフラグメントを作成します。テンプレート{% url %}で使用するオブジェクトのIDを渡すか、reverseを呼び出してURL全体を渡すだけです。

+0

返信いただきありがとうございます。あなたは私にこれを行う方法の例を教えてもらえますか? – John

+0

私が不明なことは、フィールドのレンダリングメソッドによってレンダリングされる別々のテンプレートフラグメントを作成する方法です。 'フラグメントを作成する方法はわかっていますが、ウィジェットレンダリング関数によってレンダリングされる方法はわかりません。 – John

+0

@John:Djangoブックの「テンプレートをレンダリングする」のセクションを参照してください。http://www.djangobook.com/en/beta/chapter04/ –

関連する問題