django:自定义ModelMultipleChoiceField的显示

时间:2010-09-12 17:18:26

标签: django django-forms

ModelMultipleChoiceField显示在模板中是一个复选框列表,其中包含相应对象的unicode表示形式。如何以表格形式显示ModelMultipleChoiceField以及任意列中的任意字段?例如:

[x] | obj.name | obj.field1

2 个答案:

答案 0 :(得分:4)

字段类有一个方法label_from_instance,用于控制对象的表示方式。您可以在自己的字段类中覆盖它:

from django.forms.models import ModelMultipleChoiceField

class MyMultipleModelChoiceField(ModelMultipleChoiceField):

    def label_from_instance(self, obj):
        return "%s | %s" % (obj.name, obj.field1)

您还应该能够输出一些html ...

答案 1 :(得分:0)

我在自定义的MultipleModelChoiceField中返回了obj本身

  

从django.forms.models导入ModelMultipleChoiceField

     

类MyMultipleModelChoiceField(ModelMultipleChoiceField):

def label_from_instance(self, obj):
    return obj

我的模板中有

<table>
    {% for checkbox in form.MyField %}
        <tr>
        <td>
        {{ checkbox.tag }}
        </td>
        <td>
        {{ checkbox.choice_label.field1 }}
        </td>
        <td>
        {{ checkbox.choice_label.field2}}
        </td>
        </tr>
    {% endfor %}
</table>

field1和field2是从label_from_instance返回的对象的字段。这些程序在表中显示所有选择,其中每一行都是一个对象/记录,并带有一个复选框。