J'essaie de modifier une configuration Django Mezzanine existante pour me permettre de bloguer dans Markdown. Mezzanine a un modèle « Core » qui a un contenu en tant HtmlField qui est défini comme ceci:Comment remplacer cette méthode sur un champ Modèle 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
Le problème vient des widget.attrs [ « class »] de mceEditor. Mes pensées étaient singe patcher le champ Contenu sur l'objet Blog
class BlogPost(Displayable, Ownable, Content):
def __init__(self, *args, **kwargs):
super(BlogPost, self).__init__(*args, **kwargs)
self._meta.get_field('content').formfield = XXX
Mes problèmes sont mes compétences en python ne sont pas à la tâche de remplacer une méthode liée avec un lambda qui appelle super
. Formfield est appelé par l'administrateur quand il veut créer un champ pour l'affichage sur les pages d'administration, donc j'ai besoin de patcher cela pour que les objets du widget BlogPost n'aient pas la classe de mceEditor (j'essaie de quitter mceEditor sur toutes les autres choses)
Comment fabriquez-vous la fonction de remplacement? Je suis sûr que je joins avec
setattr(self._meta.get_field('content'), 'formfield', method_i_dont_know_how_to_write)
Eh bien, dans les deux sens travailler avec quelques mods: 'si field.name == 'contenu':' doit être 'si db_field. name == 'content': ' et' instancemethod' prend un minimum de 2 arguments (le second étant le champ). Si vous pouvez réparer ces 2 choses, je l'accepterai comme réponse. Merci pour l'aide. – boatcoder
Correction ... Si vous voulez avoir plus d'informations sur l'écrasement des méthodes d'instance en python: http://irrepupavel.com/documents/python/instancemethod/ –