2009-12-26 61 views
0

这是关于在Django中制作自定义字段的问题。我正在创建一个名为EditAreaField的字段,它继承自TextField。这里是我的代码如下所示:Django中调用的formfield()方法是什么时候?

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日线,我指定一个自定义的widget到这个领域。 在线6,我更新参数。

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

如何更改Django设置的值?很显然,我可以只覆盖由开关线5和6的设置,所以我的代码如下所示:

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

但是,这是真正做到这一点的最好方法是什么?作为一个方面说明,我无法在Django站点上的任何位置找到关于formfield()函数的文档:它是否被弃用?

+0

我正在阅读您的问题。这是链接到formfield上的文档[http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.formfield](http://docs.djangoproject.com /en/dev/howto/custom-model-fields/#django.db.models.formfield) – czarchaic 2009-12-27 06:16:14

+0

糟糕。 http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.formfield – czarchaic 2009-12-27 06:17:13

回答

1

看起来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) 
+3

不应该返回超级...? – andi 2015-07-28 06:28:28

相关问题