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

2024-09-30 22:10:49 发布

您现在位置:Python中文网/ 问答频道 /正文

这是关于在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行来覆盖它们的设置,因此我的代码如下:

^{pr2}$

但这真的是最好的办法吗?在

顺便说一句,我在Django的网站上找不到关于formfield()函数的文档:它是不推荐使用的吗?在


Tags: django代码self参数部件modelsdescriptionwidget
1条回答
网友
1楼 · 发布于 2024-09-30 22:10:49

看起来formfield方法是由ModelForm助手调用的。根据文档,formfield方法应该只包含一个form_class属性,以指向这个定制模型字段的formfield类。这是一个自定义(或默认)表单字段类,它是定义默认小部件的地方

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)

相关问题 更多 >