我在django admin中使用forms.ModelMultipleChoiceField,我希望将数据库中保存的python列表显示为文本

时间:2014-07-10 09:09:58

标签: python django django-forms django-admin

models.py

dummyColumnName = models.CharField(max_length=300, blank=True, verbose_name="MyCrazyIdea",db_column='dummy_column_name')

在数据库中,值存储为

u'[1L, 2L, 4L, 11L, 74L, 84L, 86L, 87L, 133L, 134L, 137L, 142L]

forms.py

    dummyColumnName = forms.ModelMultipleChoiceField(queryset=get_queryset(),
                label = "My Crazy Idea/s",
                widget = FilteredSelectMultiple("My Crazy Idea/s", is_stacked=False),
                required = False)

我希望FilteredSelect Box的右侧显示另一个列表中的值

现在,如果我在数据库中保存142,如'[142L]',则显示为

1
2
4

1 个答案:

答案 0 :(得分:1)

您需要创建自己的自定义表单字段,该字段是forms.ModelMultipleChoiceField的子类,并定义to_python和prepare_value方法。类似的东西:

import ast

class StrModelMultipleChoiceField(forms.ModelMultipleChoiceField):
    def to_python(self, value):
         value = ast.literal_eval(value)
         return super(StrModelMultipleChoiceField, self).to_python(value)

    def prepare_value(self, value):
         value = (super(StrModelMultipleChoiceField, self).prepare_value(value)
         return unicode(value)