0
ジャンゴ1.9.7UpdateViewとCREATEVIEWを共有し、共通のJavaScript関数
更新と作成は、多かれ少なかれ同様の操作です。ウィジェットattrsとしてJavaScriptイベントを追加したい場合もあります。たとえば、ユーザーは性別を選択します。それに応じて、私は乙女の名前を表示したり隠したりしたいと思います。これは、UpdateViewとCreateViewに共通の操作の単なる例です。
私はミックスインとしてそれを整理しようとしましたが、失敗しました:UpdateViewとCREATEVIEWの両方がFormMixinを使用しています。私がFormMixinから継承している別のミックスインを編成すると、私は衝突を起こします。
あなたは私のコードを繰り返すことなく対処する方法を理解する助けてもらえますか?
class PersonUpdateView(UpdateView):
model = Person
fields = ['gender', 'last_name']
class PersonCreate(CreateView):
model = Person
fields = ['gender', 'last_name']
redirect_name = "people"
field_attrs = {'gender': {'onchange':"alert('G')"},
'last_name': {'onclick': "alert('LN')"},
}
def get_form(self, form_class=None):
form = super(PersonCreate, self).get_form(form_class)
for key, value in self.field_attrs.items():
form.fields[key].widget.attrs = value;
return form
solarissmoke、答えてくれてありがとう。しかし、私はその考えを理解できません。 PersonCreateとPersonUpdateViewでget_formメソッドを再定義することを提案しますか?そして、mixinはそれらのビューについて知りません。しかし、見解はミックスインについて知っている。特別なコードはビュー内にあります:フィールドとその属性。一般的なコードはミックスインする必要があります。とにかく、あなたが正しく理解すれば、コードの複製を提供しているようです。これは、ミックスインなしでget_formメソッドを再定義するより複雑です。私がそのアイデアを捉えていないのなら、許してください。 – Michael
申し訳ありませんが、私はあなたの質問を理解していないようです。私は本当にあなたのコメントを残念ながら理解していません... – solarissmoke
私は説明が不器用だった場合、私を許してください。 mixinを使って問題に対処しました。あなたが提案したようにはなりませんが、完璧に動作します。ご協力ありがとうございます。 – Michael