#23404: Django modelformset returns the same data inserted in the previous
insert
when opening the same page for inserting new data
----------------------------+----------------------------------
Reporter: guruprasad | Owner: nobody
Type: Bug | Status: new
Component: Forms | Version: 1.6
Severity: Normal | Keywords: modelformset_factory
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+----------------------------------
{{{
# models.py
import datetime
from django.db import models
class Category(models.Model):
category_name = models.CharField(unique=True, max_length=100)
is_enabled = models.BooleanField(default=True)
created_date = models.DateField(default=datetime.date.today)
def __unicode__(self):
return self.category_name
class Website(models.Model):
url = models.URLField(unique=True)
site_name = models.CharField(max_length=100)
vertical_category = models.ForeignKey(Category,
related_name="websites")
unique_users_per_day = models.IntegerField()
page_views_per_day = models.IntegerField()
unique_users_per_month = models.IntegerField()
page_views_per_month = models.IntegerField()
class Section(models.Model):
website = models.ForeignKey(Website, related_name="sections")
url = models.URLField(unique=True)
section_name = models.CharField(max_length=100)
}}}
{{{
# forms.py
from django import forms
from django.forms.models import modelformset_factory, BaseModelFormSet
from .models import Website, Section
class AddWebsiteForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddWebsiteForm, self).__init__(*args, **kwargs)
self.fields['unique_users_per_day'].widget = forms.TextInput()
self.fields['page_views_per_day'].widget = forms.TextInput()
self.fields['unique_users_per_month'].widget = forms.TextInput()
self.fields['page_views_per_month'].widget = forms.TextInput()
self.fields['vertical_category'].empty_label = "Vertical Category"
class Meta:
model = Website
exclude = []
class AddSectionForm(forms.ModelForm):
class Meta:
model = Section
exclude = ['website',]
class FirstRequiredFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(FirstRequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
AddSectionFormSet = modelformset_factory(Section, AddSectionForm,
formset=FirstRequiredFormSet)
}}}
{{{
from django.shortcuts import render, redirect
from django.core.urlresolvers import reverse_lazy
from django.forms.formsets import INITIAL_FORM_COUNT
from .forms import AddWebsiteForm, AddSectionFormSet
def add_website(request):
import pdb; pdb.set_trace()
if request.method == "POST":
website_form = AddWebsiteForm(request.POST)
section_formset = AddSectionFormSet(request.POST)
if website_form.is_valid() and section_formset.is_valid():
website = website_form.save()
sections = section_formset.save(commit=False)
for section in sections:
section.website = website
section.save()
if 'add_another' in request.POST:
return redirect(reverse_lazy('login'))
else:
return redirect(reverse_lazy('login'))
else:
website_form = AddWebsiteForm()
section_formset = AddSectionFormSet()
return render(request,
"website/add.html",
{
"website_form" : website_form,
"section_formset": section_formset
})
}}}
{{{
<form action="" method="post">
<div>
{{ website_form }}
</div>
<div>
{{ section_formset }}
</div>
<input type="submit" value="submit">
}}}
After submitting the form for the first time and inserting some data, I
visit the same URL for inserting more data. But the form of section
formset is pre-populated with the data inserted the previous time.
--
Ticket URL: <https://code.djangoproject.com/ticket/23404>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" 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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/053.d096b3000e411f084c687231d432aabd%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.