django forms input required="True" in unittest...

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab gerade ein Problem mit unittests für eine django app, die unter v1.7 und v1.8 laufen soll.

z.B.: https://travis-ci.org/jedie/django-secu ... s/72737201

Im Template: {{ form.as_table }}

Generiert unter Django v1.8 u.a.:

Code: Alles auswählen

<input id="id_username" maxlength="254" name="username" type="text" class="required" required />
unter v1.7:

Code: Alles auswählen

<input id="id_username" maxlength="254" name="username" type="text" class="required" required="True" />

Damit es in v1.7 überhaupt "required" gesetzt wird, mache ich in der Form.__init__ das:

Code: Alles auswählen

        for visible in self.visible_fields():
            visible.field.widget.attrs['class'] = "required"
            visible.field.widget.attrs["required"] = True
Würde ich das nicht machen, würde nur <input id="id_username" maxlength="254" name="username" type="text" /> generiert werden...


Das Problem ist natürlich, das in den unittests die Unterschiedliche "required" angaben in der HTML Ausgabe zu Problemen führen kann.

Was machen?

EDIT: btw. die richtigen "HTML5 boolean attributes" sind IMHO erst mit django 1.8 möglich, siehe:
https://code.djangoproject.com/ticket/20684
https://github.com/django/django/commit ... d2f86883c7

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mit https://github.com/jedie/django-secure- ... 64671387f6 hab ich einen work-a-round eingebaut:

Code: Alles auswählen

        if django.VERSION >= (1, 8):
            required_html = "required"
        else:
            required_html = 'required="True"'

        self.assertContainsHtml(response,
            '<input id="id_username" maxlength="254" name="username" type="text" class="required" %s />' % required_html
        )
        self.assertContainsHtml(response,
            '<input id="id_password" maxlength="%i" name="password" type="password" class="required" %s />' % (
                crypt.CLIENT_DATA_LEN, required_html
            )
        )
Damit geht es dann: Bild - https://travis-ci.org/jedie/django-secu ... s/72741866

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten