djangoが選択したjQueryプラグインを使用するための2つのカスタムウィジェットを作成します.1つはForeignKey
モデルフィールド、もう1つはManyToManyField
です。したがって、それぞれ、私はforms.Select
とforms.SelectMultiple
を無効にします。 Select
を参照してください。年代とSelectMultiple
年代には、それぞれのメソッドをレンダリングする必要があり、スーパーへの呼び出しがあるpythonのsuper()メソッドの解決
class ChosenWidgetParent(object):
class Media:
css = {
'all': (
'sub/staticfull/css/plugins/chosen/chosen.css',
)
}
js = (
'sub/staticfull/js/jquery-2.1.1.js',
'sub/staticfull/js/plugins/chosen/chosen.jquery.js',
)
def render(self, name, value, attrs=None, **kwargs):
attrs['chosen'] = 'chosen'
rendered = super().render(name, value, attrs, **kwargs)
return rendered + mark_safe(u'''
<script>
$(document).ready(function() {
$('#id_%(name)s').chosen({
disable_search_threshold: 10,
})
})
</script>''' % {'name': name})
注:として私は、共通の親クラスで共通の機能を置きます。
そして、私は私のクラスを定義します。
class ChosenWidgetMultiple(widgets.SelectMultiple, ChosenWidgetParent):
pass
class ChosenWidget(widgets.Select, ChosenWidgetParent):
pass
これは、残念ながら動作しませんが、私は親クラスを交換するとき、それは動作します。
class ChosenWidgetMultiple(ChosenWidgetParent, widgets.SelectMultiple):
pass
class ChosenWidget(ChosenWidgetParent, widgets.Select):
pass
誰かが私の理由を説明できますか?
https://www.youtube.com/watch?v=EiOglTERPEo –
をご覧になるか、[super consider super](https://rhettinger.wordpress.com/2011/05/26/super-considered-スーパー/)。 –
ダニエル・ローズマン:私はその記事を見てきましたが、徹底的に読んだことはありませんが、他の記事を読んでいます。このメソッド全体の解決の問題は、今は少し抽象的で複雑に思えます。だから、特定の入力が助けになると思います。ありがとう、 – mehmet