代码之家  ›  专栏  ›  技术社区  ›  Vlad the Impala

在Django中何时调用formfield()方法?

  •  0
  • Vlad the Impala  · 技术社区  · 16 年前

    这是一个关于在Django中创建自定义字段的问题。我正在做一个叫做 EditAreaField TextField . 我的代码是这样的:

    class EditAreaField(models.TextField):
        description = "A field for editing the HTML of a page"
        def formfield(self, **kwargs):
            defaults = {}
            defaults['widget'] = EditArea() # setting a new widget
            defaults.update(kwargs)
            return super(EditAreaField, self).formfield(**defaults)
    

    在第五行 ,我正在为此字段分配一个自定义小部件。 第6行 ,我更新了参数。

    问题是,Django发送了一个参数 widget 设定为 django.contrib.admin.widgets.AdminTextareaWidget

    如何更改Django正在设置的值?显然,我可以通过切换第5行和第6行来覆盖它们的设置,因此我的代码如下所示:

            defaults.update(kwargs)
            defaults['widget'] = EditArea() # override django here
    

    但这真的是最好的方法吗?

    顺便说一句,我在Django网站的任何地方都找不到关于formfield()函数的文档:它是否已弃用?

    1 回复  |  直到 16 年前
        1
  •  2
  •   RexE    8 年前

    看起来像是 formfield 方法由 ModelForm 帮手。根据这些文件,这个 方法应该只包含一个 form_class

    from myapp.forms import MyCustomFormField
    
    #create a custom model field
    class EditAreaField(models.TextField):
      def formfield(self, **kwargs):
        defaults={'form_class': MyCustomFormField}#pass our custom field as form_class
        defaults.update(kwargs)
        return super(EditAreaField, self).formfield(**defaults)