1

这是关于在 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)

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

问题是,Django 发送了一个widget设置为的参数django.contrib.admin.widgets.AdminTextareaWidget,它覆盖了我的 EditArea() 小部件。

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

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

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

附带说明一下,我在 Django 网站上的任何地方都找不到有关 formfield() 函数的文档:它是否已弃用?

4

1 回答 1

2

看起来该formfield方法是由ModelForm助手调用的。根据文档,该formfield方法应仅包含一个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)
于 2009-12-27T17:07:33.690 回答