Hello,
I'm not sure if I should post this message in django-developers or
here, but before I bother django developers, I wanted to discuss this
issue with django users.
I stumbled across this one when I was creating a custom User class, by
inheriting from django's built in User class. I extended User,
extended User admin, and even created a custom add form, but I just
couldn't get my form fields displayed. Having fair experience with
django forms, I thought, that these fields should automatically be
rendered in form. When I took a look at the form's code, I immediately
understood what's wrong with my approach- form fields were hardcoded
in django\contrib\admin\templates\admin\auth\user\add_form.html
Looking at the code, I see there is some duplication in
contrib.auth.forms file- help text and field names are both specified
in forms and in template- see yourself:

forms.py
class UserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given
username and password.
    """
    username = forms.RegexField(label=_("Username"), max_length=30,
regex=r'^\w+$',
        help_text = _("Required. 30 characters or fewer. Alphanumeric
characters only (letters, digits and underscores)."),
        error_message = _("This value must contain only letters,
numbers and underscores."))
    password1 = forms.CharField(label=_("Password"),
widget=forms.PasswordInput)
    password2 = forms.CharField(label=_("Password confirmation"),
widget=forms.PasswordInput)


add_form.html
<p>{% trans "First, enter a username and password. Then, you'll be
able to edit more user options." %}</p>

<fieldset class="module aligned">

<div class="form-row">
  {{ form.username.errors }}
  {# TODO: get required class on label_tag #}
  <label for="id_username" class="required">{% trans 'Username' %}:</
label> {{ form.username }}
  <p class="help">{{ form.username.help_text }}</p>
</div>

<div class="form-row">
  {{ form.password1.errors }}
  {# TODO: get required class on label_tag #}
  <label for="id_password1" class="required">{% trans 'Password' %}:</
label> {{ form.password1 }}
</div>

<div class="form-row">
  {{ form.password2.errors }}
  {# TODO: get required class on label_tag #}
  <label for="id_password2" class="required">{% trans 'Password
(again)' %}:</label> {{ form.password2 }}
  <p class="help">{% trans 'Enter the same password as above, for
verification.' %}</p>
</div>
</fieldset>
(I left out irrelevant parts of code)
Shouldn't the add_form.html be converted to something like:

{% for field in form %}
        <div class="form-row">
            {{ field.errors }}
                        {% trans field.label_tag %}:{{ field }}
                        <p class="help">{{ field.help_text }}</p>
        </div>
{% endfor %}

In my opinion this approach is more flexible and avoids unneccesary
duplication, while maintaining the same functionality and appearance.

And my point is- should I post this message to django-developers (I
know, some of the developers should read this list too) or keep my
thoughts to myselft? :>


Reinis

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to