我试图修改现有的Django Mezzanine安装程序以允许我在Markdown中进行博客。夹层具有带有内容作为被像这样限定的HtmlField一个“核心”模型:如何在Django模型字段上覆盖此方法
from django.db.models import TextField
class HtmlField(TextField):
"""
TextField that stores HTML.
"""
def formfield(self, **kwargs):
"""
Apply the class to the widget that will render the field as a
TincyMCE Editor.
"""
formfield = super(HtmlField, self).formfield(**kwargs)
formfield.widget.attrs["class"] = "mceEditor"
return formfield
的问题来自于widget.attrs mceEditor的[“类”。我的想法是猴子修补博客对象
class BlogPost(Displayable, Ownable, Content):
def __init__(self, *args, **kwargs):
super(BlogPost, self).__init__(*args, **kwargs)
self._meta.get_field('content').formfield = XXX
我的问题是我的Python的技能在内容领域都没有达到与调用super
拉姆达更换绑定的方法的任务。
当管理员想要创建一个显示在管理页面上的字段时,formfield被调用,所以我需要修补它以使BlogPost窗口小部件对象不具有mceEditor类(我试图离开mceEditor在所有其他的东西)
你如何制作替代功能?我敢肯定,我
setattr(self._meta.get_field('content'), 'formfield', method_i_dont_know_how_to_write)
那么,这两种方式有几个MODS的工作: '如果field.name == '内容':' 应该 '如果db_field。 name =='content':' 和'instancemethod'至少需要2个参数(第二个参数是字段)。如果你能解决这两件事,我会接受它作为答案。 感谢您的帮助。 – boatcoder 2010-12-11 03:44:11
修复了它......如果您想了解更多有关覆盖python实例方法的信息:http://irrepupavel.com/documents/python/instancemethod/ – 2010-12-11 13:07:57