ColumnFormFormSet objects has no attribute ‘save’
Question:
I want to create 30 fields in the design.html
, after I successfully added that using django formset
When I try to submit the form instead of saving the field to the database, it throws me an error saying 'ColumnFormFormSet' object has no attribute 'save'
how can I solve this problem?
models.py:
class Type(models.Model):
TYPE_OF_DATA = (
('Number', 'Number'),
('character', 'character'),
('check_box', 'check_box'),
('date', 'date'),
('image', 'image'),
)
data_type = models.CharField(max_length=1000, choices= TYPE_OF_DATA)
class Column(models.Model):
name = models.CharField(max_length=100)
selec_type = models.ForeignKey(Type, on_delete=CASCADE)
Forms.py:
from django import forms
from .models import Column
class ColumnForm(forms.ModelForm):
class Meta:
model = Column
fields = ['name', 'selec_type']
views.py:
From .forms import ColumnForm
From django.forms import formset_factory
def design(request):
ColumnFormSet = formset_factory(ColumnForm, extra=30)
formset = ColumnFormSet
if request.method == 'POST':
formset = ColumnFormSet(request.POST)
if formset.is_valid():
formset.save()
return redirect('Home')
else:
formset = ColumnFormSet()
return render (request, 'design.html', {'formset':formset})
template.design.html:
<form method='post'>
{% csrf_token %}
{{ formset.management_form}}
{% for form in formset %}
{{form.as_p}}
{% endfor %}
<button type='submit'>Save<button/>
<form/>
Answers:
You cannot call save()
on a regular Formset
, you probably want to be using a ModelFormset
instead.
Replacing the formset_factory import in your views.py with modelformset_factory should do the trick.
From .forms import ColumnForm
From django.forms import modelformset_factory
def design(request):
ColumnFormSet = modelformset_factory(Column, fields = ('name', 'selec_type'), extra=30)
formset = ColumnFormSet
if request.method == 'POST':
formset = ColumnFormSet(request.POST)
if formset.is_valid():
formset.save()
return redirect('Home')
else:
formset = ColumnFormSet()
return render (request, 'design.html', {'formset':formset})
I want to create 30 fields in the design.html
, after I successfully added that using django formset
When I try to submit the form instead of saving the field to the database, it throws me an error saying 'ColumnFormFormSet' object has no attribute 'save'
how can I solve this problem?
models.py:
class Type(models.Model):
TYPE_OF_DATA = (
('Number', 'Number'),
('character', 'character'),
('check_box', 'check_box'),
('date', 'date'),
('image', 'image'),
)
data_type = models.CharField(max_length=1000, choices= TYPE_OF_DATA)
class Column(models.Model):
name = models.CharField(max_length=100)
selec_type = models.ForeignKey(Type, on_delete=CASCADE)
Forms.py:
from django import forms
from .models import Column
class ColumnForm(forms.ModelForm):
class Meta:
model = Column
fields = ['name', 'selec_type']
views.py:
From .forms import ColumnForm
From django.forms import formset_factory
def design(request):
ColumnFormSet = formset_factory(ColumnForm, extra=30)
formset = ColumnFormSet
if request.method == 'POST':
formset = ColumnFormSet(request.POST)
if formset.is_valid():
formset.save()
return redirect('Home')
else:
formset = ColumnFormSet()
return render (request, 'design.html', {'formset':formset})
template.design.html:
<form method='post'>
{% csrf_token %}
{{ formset.management_form}}
{% for form in formset %}
{{form.as_p}}
{% endfor %}
<button type='submit'>Save<button/>
<form/>
You cannot call save()
on a regular Formset
, you probably want to be using a ModelFormset
instead.
Replacing the formset_factory import in your views.py with modelformset_factory should do the trick.
From .forms import ColumnForm
From django.forms import modelformset_factory
def design(request):
ColumnFormSet = modelformset_factory(Column, fields = ('name', 'selec_type'), extra=30)
formset = ColumnFormSet
if request.method == 'POST':
formset = ColumnFormSet(request.POST)
if formset.is_valid():
formset.save()
return redirect('Home')
else:
formset = ColumnFormSet()
return render (request, 'design.html', {'formset':formset})