如何覆盖ModelChoiceField模板?

时间:2012-11-18 10:49:25

标签: python django templates

我想覆盖ModelChoiceField模板。我有一个类别模型,其中包含名称和深度等属性 - 类别是嵌套的,深度告诉我给定类别的树有多深。我想要做的是按深度缩进类别名称,所以如果我有两个类别 - 深度2和4,那么我想在选择框中用2和4个空格缩进它们的名字。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您考虑过django mptt吗?

它添加了一大堆帮助程序来处理树数据,包括漂亮的嵌套小部件

否则,我想我过去曾经使用过类似的东西 (复制形式的旧代码库,所以可能需要调整才能工作。另外,认为它是为django 1.2编写的,所以可能需要更新)

class MyChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return my_fun(obj)

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "my_field":
            kwargs["form_class"] = MyChoiceField
            return db_field.formfield(**kwargs)
        return super(MyModelAdmin, self).formfield_for_foreignkey(
            db_field, request, **kwargs)