あなたはカスタムウィジェットを作成したいと思うでしょう(私は、あなたが望むものを正確に行う組み込みのウィジェットを認識していません)。最も有益な例はおそらくDjangoに付属しているウィジェット(forms/widgets.py内)です。また、カスタムウィジェットの作成例を見ることができますhere。
私はちょっと手を加えましたが、組み込みのInput
ウィジェットを適用した後、これは私が思いついたものです。私はいくつかのテストを行なったし、それが私の作品:
class CommaTags(Widget):
def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, type='text', name=name)
objects = []
for each in value:
try:
object = Tag.objects.get(pk=each)
except:
continue
objects.append(object)
values = []
for each in objects:
values.append(str(each))
value = ', '.join(values)
if value: # only add 'value' if it's nonempty
final_attrs['value'] = force_unicode(value)
return mark_safe(u'<input%s />' % flatatt(final_attrs))
(注)この例では、ウィジェットは架空のTag
モデルを使用するようにハードコードされており、それだけに表示されますどのよう各オブジェクトのstr()
方法を使っていることカンマで区切られたリストおそらくあなたの用途に合わせてこれらを変更したいと思うでしょう。また、私はこれをforms/widgets.pyに直接持っていました。もしあなたがおそらくそうであるように他の場所に置くなら、私が使ったことのいくつかをインポートする必要があります。
作成し、あなたがそうのように、自分のフォームでごModelMultipleChoiceFieldためのウィジェットとしてそれを指定することができたら:もちろん
from django import forms
class TagForm(forms.ModelForm):
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(),
widget=CommaTags)
class Meta:
model = Tag
うん;)返信用のおかげで、私はこの実装のために見ていきます私はそれを検証するでしょう:) –
さて、私は少し私の答えを更新し、現在の作業例が含まれています。私はこれが助けて欲しい! – mjjohnson
あなたの最終的なコードです:http://python.pastebin.com/uvPL8Aat。どうもありがとうございました! –