2012-06-09 22 views

回答

2

你是對的 - 它不工作......我想最簡單的方法是從python安全地標記它。

from django.utils.safestring import mark_safe 

MY_CHOICES = [ 
    ('foo', mark_safe('& foo')), 
    ('bar', 'bar'), 
] 

據有關人士介紹,它看起來像您可以手動定義ModelChoiceField.choices或寫一個新的領域,並覆蓋label_from_instance

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = Foo 
    def __init__(self, *args, **kwargs): 
     super(MyModelForm, self).__init__(*args, **kwargs) 
     self.fields['foo'].choices = ((foo.id, mark_safe(foo.bar)) for foo in Foo.objects.all()) 



class SafeModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return mark_safe(obj) 

我想我更喜歡構造自己的選擇,使任何其他神奇ModelFormfield -> form field轉換不會被覆蓋。

+0

有沒有辦法做到這一點從一個ForeignKey字段生成的下拉框? – davidscolgan

+0

我想你可以在你的表單__init__中做到這一點.. –

+0

哦,等等,'ModelChoiceField'使用查詢集,而不是選擇。讓我們深入瞭解它如何將QS轉換爲選擇。 –

相關問題