Hi Ken,
You are getting this error because you are missing this line in your
template: {{ formset.management_form }}
Take a look into the documentation:
https://docs.djangoproject.com/en/1.8/topics/forms/formsets/#using-a-formset-in-views-and-templates
You need to carry the information to your second view. If you don’t include
first_name and last_address as fields in the second form, the information
won’t get to your second view, when you post. That’s why I suggested
rendering them as hidden inputs. Your Checkbox form also need to have the
fields.
This is what I mean:
class NameForm (forms.Form):
first_name = forms.CharField (required = False)
last_name = forms.CharField (required = False)
class CheckBox (NameForm):
overwrite = forms.BooleanField (required = False)
And on the template:
<tr>
<td>{{ info.first_name }}</td>
<td>{{ info.last_address }}</td>
<td class="center"><input type="checkbox" name='overwrite' value
="1"></td>
</tr>
<input type=“hidden” name=“first_name” value=“{{ info.first_name
}}”>
<input type=“hidden” name=“last_address” value=“{{
info.last_address }}”>
Let me know if this helps.
cheers,
On Mon, May 4, 2015 at 3:50 PM, Ken Nguyen <[email protected]> wrote:
> Thank you for the input. I've already tried what you've suggested but
> still the same result, "Management Form Data is Missing." It's not going
> to know the "first_name" and "last_name" the second time around since I
> have the variable
>
> {{ info.first_name }} and {{ info.last_name }}
>
> My* form2.html* currently looking like so:
>
> {% for info in data %}
> <tr>
> <input id="id_nameform-{{ forloop.counter0 }}-first_name" name
> ="nameform-{{ forloop.counter0 }}-first_name" type="hidden" value="{{
> info.first_name }}" />
> <input id="id_nameform-{{ forloop.counter0 }}-last_name"
> name="nameform-{{
> forloop.counter0 }}-last_name" type="hidden" value="{{ info.last_name }}"
> />
> <td>{{ info.first_name }}</td>
> <td>{{ info.last_name }}</td>
> <td class="center"><input type="checkbox" name='overwrite'
> value="1"></td>
> </tr>
> {% endfor %}
>
>
> When you say inherit from form1 and just add the checkboxes, can you
> elaborate that? How do I inherit it? Do you mean just replicate the first
> form and add checkboxes to it?
>
> Thanks,
>
> Ken
>
>
> On Saturday, May 2, 2015 at 1:24:22 PM UTC-7, Bernardo Brik wrote:
>>
>> You should add the same fields (first_name and address) to form2 and
>> render them with hidden inputs.
>> You can try to make form2 inherit from form1 and just add the checkbox.
>>
>> On Friday, May 1, 2015 at 9:58:28 PM UTC-3, Ken Nguyen wrote:
>>>
>>> I've made some attempted to use formwizard but there wasn't much
>>> documentation about it so I decided to stay with the basic. I've
>>> successfully obtained and display the data from the first form to the
>>> second form and added some checkbox next to the data to allow user to
>>> choose whether to overwrite or ignore the duplicate data found in the
>>> backend process. The problem I have is the second form doesn't know how
>>> retrieve the data of the first form after hitting "Confirm" button. The
>>> form2.html template invalidated the data completely since it called itself
>>> again by the form action after submitting the data. Is there a way to solve
>>> this or a better approach to this?
>>>
>>> *forms.py*
>>>
>>> class NameForm (forms.Form):
>>> first_name = forms.CharField (required = False)
>>> last_name = forms.CharField (required = False)
>>>
>>> class CheckBox (forms.Form):
>>> overwrite = forms.BooleanField (required = False)
>>>
>>> views.py
>>>
>>> def form1 (request):
>>>
>>> NameFormSet = formset_factory (NameForm, formset = BaseNodeFormSet,
>>> extra = 2, max_num = 5)
>>>
>>> if request.method == 'POST':
>>>
>>> name_formset = NameFormSet (request.POST, prefix = 'nameform')
>>>
>>> if name_formset.is_valid ():
>>> data = name_formset.cleaned_data
>>>
>>> context = {'data': data}
>>> return render (request, 'nameform/form2.html', context)
>>> else:
>>> name_formset = NameFormSet (prefix = 'nameform')
>>>
>>> context = {......}
>>>
>>> return render (request, 'nameform/form1.html', context)
>>>
>>> def form2 (request):
>>>
>>> CheckBoxFormSet = formset_factory (CheckBox, extra = 2, max_num = 5)
>>>
>>> if request.method == 'POST':
>>>
>>> checkbox_formset = CheckBoxFormSet (request.POST, prefix =
>>> 'checkbox')
>>>
>>> if checkbox_formset.is_valid ():
>>> data = checkbox_formset.cleaned_data
>>>
>>> context = {'data': data}
>>> return render (request, 'nameform/success.html', context)
>>>
>>> else:
>>> checkbox_formset = CheckBoxFormSet (prefix = 'checkbox')
>>>
>>> return HttpResponse ('No overwrite data.')
>>>
>>>
>>>
>>> *form2.html*
>>>
>>>
>>> <!DOCTYPE html>
>>> <html>
>>> <head lang="en">
>>> <meta charset="UTF-8">
>>> {% load staticfiles %}
>>> <link rel="stylesheet" type="text/css" href="{% static
>>> 'nodeform/style.css' %}" >
>>> <title>User Information</title>
>>> </head>
>>> <body>
>>> <h1>User Information:</h1>
>>> <form action="form2" method="POST">
>>> <div id="tablefont">
>>> <table id="table01">
>>> <tr>
>>> <th>First Name</th>
>>> <th>Last Name</th>
>>> <th class="center">Overwrite</th>
>>> </tr>
>>> {% for info in data %}
>>> <tr>
>>> <td>{{ info.first_name }}</td>
>>> <td>{{ info.last_address }}</td>
>>> <td class="center"><input type="checkbox" name='overwrite'
>>> value="1"></td>
>>> </tr>
>>> {% endfor %}
>>> </table>
>>> </div>
>>> <br>
>>> <p><input type="submit" value="Confirm">
>>> <a href="{% url 'form1' %}">
>>> <button type="button">Cancel</button></a></p>
>>> </form>
>>> </body>
>>> </html>
>>>
>>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Django users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/django-users/jnDIOT4dNqQ/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/797bdc71-28e4-4277-b645-7c0be9593b27%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/797bdc71-28e4-4277-b645-7c0be9593b27%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
Bernardo Brik
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAO2FqvyTN3VkfKTxFAE8nEEXr_aEbP%2BEa2FfvaMTkMepJ8A3oQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.