django - wie kann ich in einem benutzerdefinierten Widget auf das Formularfeld zugreifen?

Die folgende Klasse erbt von derTextarea Widget und Features Javascript-Code, der anzeigt, wie viele Zeichen mehr ein Benutzer in ein Textfeld eingeben kann.

class TextAreaWithCharCounter(forms.Textarea):

    class Media:
        js = ('js/jquery.charcounter.js',)

    def render(self, name, value, attrs = None):
        id = attrs['id']
        max_length = self.attrs.get('max_length', 200)
        output = super(TextAreaWithCharCounter, self).render(name, value, attrs)
        output += mark_safe(u'''
                        <script type="text/javascript">
                        $("#%s").charCounter(%d, {classname:"charcounter"});
                        </script>'''%(id, max_length))        
        return output

Der relevante Teil des Formularcodes lautet wie folgt:

class MyForm(forms.Form):
    foo = forms.CharField(max_length = 200, widget = TextAreaWithCharCounter(attrs={'max_length':200}))
    ...

Sie können sehen, dass ich diemax_length Argument zweimal, eines für das Feld und eines für das Widget. Eine bessere Möglichkeit besteht darin, auf das Formularfeld innerhalb des Widgets zuzugreifen und das Attribut max_length abzurufen, sodass das Widget kein Argument max_length benötigt. Wie kann ich das machen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage