9
votes

I have a simple Django form:

class CommentForm(forms.Form):
    comment = forms.CharField(max_length=2000, required=True)
    post_id = forms.CharField(max_length=2000, widget=forms.HiddenInput, required=True)
    parent_id = forms.CharField(max_length=2000, widget=forms.HiddenInput, required=True)

Now I want to print this form several times on my page - I am doing it through a template tag, so the new form is created each time. The problem is, that I get the same ID's for all fields.

I know about the prefix, but I do not want to change field names, because there is one handler for all forms, only to set unique IDs.

So my question:

  • Is there a way to make Django set unique IDs if I want to output a form several times, without changing the names of fields?
  • If not, is there a way to make Django not to output IDs at all?
1
Have you looked at Django formsets? They allow you to manage multiple instances of the same form on a page: docs.djangoproject.com/en/dev/topics/forms/formsets - Timmy O'Mahony
@pastylegs, thank you for the link. I cannot use the formsets, because each form has different initial parameters. - Silver Light
You should be able to populate the forms in the formset with separate initial data by looping over the forms. Have a look at some of the examples. Formsets don't seem to be as well documented as the rest but they are quite powerful - Timmy O'Mahony

1 Answers

17
votes

You can control how the automatic IDs are generated with the auto_id parameter when you create a new instance of that form

Have a look here (search for auto_id):

http://docs.djangoproject.com/en/dev/ref/forms/api/#configuring-html-label-tags