既存の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
問題がmceEditorのwidget.attrs [「クラス」]から来ます。私の考えは
class BlogPost(Displayable, Ownable, Content):
def __init__(self, *args, **kwargs):
super(BlogPost, self).__init__(*args, **kwargs)
self._meta.get_field('content').formfield = XXX
Blogオブジェクト上のコンテンツ]フィールドにパッチを適用サルにいた私の問題は私のpythonのスキルですsuper
を呼び出し、ラムダとバインドされたメソッドを置き換えるのタスクまでではありません。
フォームフィールドは、管理ページに表示するフィールドを作成するときに呼び出されるので、BlogPostウィジェットオブジェクトにmceEditorのクラスを持たないようにパッチを適用する必要があります(mceEditor他のすべてについて)
交換機能をどのように工夫していますか?私はあなたが管理者の方法formfield_for_dbfield
で使用されるフォームフィールドを変更することができ
setattr(self._meta.get_field('content'), 'formfield', method_i_dont_know_how_to_write)
まあが、両方の方法は、いくつかの改造で動作します。 name == 'content': ' そして' instancemethod'は少なくとも2つの引数(2つ目はフィールド)をとります。あなたがそれらの2つのことを解決できるなら、私はそれを答えとして受け入れます。 ありがとうございます。 – boatcoder
修正済み... pythonでインスタンスメソッドを上書きする方法について詳しくは、http://irrepupavel.com/documents/python/instancemethod/ –