2012-01-24 14 views
0

をDjangoのためにクラスを追加します。 Studioにはフォームがドロップダウンされている必要がありますが、必要なものがまだデータベースに入っていない場合は、ユーザーが新しいStudioに入ることができます。 まず、これを実装する簡単な方法があれば教えてください。は、私は2つのモデルを持っているフォームウィジェットフィールドに

私がやっていることは、スタジオのドロップダウンの横に「+」アイコンを追加することです。これをクリックすると、新しいスタジオのテキストを入力できる新しいフィールドが表示されます。私は、ユーザーが心を変えた場合に、それを再表示するunhidフィールドの隣に " - "ボタンを含めたいと思います。それは私が立ち往生している場所です。

私のフォームは現在、次のようになります。

class SelectWithPlus(forms.Select): 
    def render(self, name, *args, **kwargs): 
     html = super(SelectWithPlus, self).render(name, *args, **kwargs) 
     plus = render_to_string("form/plus.html", {'field': name}) 
     return html+plus 

class DeSelectWithX(forms.CharField): 
    def render(self, name, *args, **kwargs): 
     html = super(DeSelectWithX, self).render(name, *args, **kwargs) 
     ex = render_to_string("form/ex.html", {'field': name}) 
     return html+ex 

class FilmForm(forms.Form): 
    required_css_class = 'required' 
    studio = forms.ModelChoiceField(Studio.objects, widget = SelectWithPlus) 
    new_studio = forms.CharField(max_length=30, required=False, label = "New Studio Name", widget = DeSelectWithX) 
    name = forms.CharField(max_length=30, label = "Film Name") 

    def __init__(self, *args, **kwargs): 
     super(MdlForm, self).__init__(*args,**kwargs) 
     self.fields['new_studio'].widget.attrs['class'] = 'hidden_studio_field' 

アイデアはスタジオのフィールドは、「+」アイコンのHTMLのビットを追加するウィジェットを持っていることである。

<a 
    href="JavaScript:void()" 
    class="add-another" 
    id="add_id_{{ field }}"> 
    <img src="http://mydbupload.s3.amazonaws.com/icon_addlink.gif" width="10" height="10" Border ="0" alt="Add New {{ field }}"/> 
</a> 

この「 - 」だから私は同様のを追加したい

<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".hidden_studio_field").hide(); 
     $('label[for="id_new_studio"]').hide(); 
    }); 

    $(function() { 
     $('#add_id_studio').click(function() { 
      $(".hidden_studio_field").show(); 
      $('label[for="id_new_studio"]').show(); 
     }); 
    }); 
</script> 

しかし:クリックすると、それは適切な名前のフィールドを表示するためにjqueryのをトリガーtonをnew_studioフィールドに追加します。私はSelectWithPlusウィジェットを複製しようとしましたが、私が当てはまる1つの問題は、クラス "hidden_​​studio_field"をそのフィールドに追加するコードをもう使用できなくなることです。 'DeSelectWithX'オブジェクトに属性 'attrs'がありません

短い質問:ウィジェットで定義されたフィールドにCSSタイプのクラスを追加するにはどうすればよいですか?

答えて

0

DeSelectWithXは、forms.CharFieldではなく、forms.TextInputから継承する必要があります。

関連する問題