formset should contain a valid Django Formset

903 views Asked by At

I am trying to make a form where I can add multiple object to a list. When I try to use the formset I get the error, everything seems to work when I remove the formset from the template.

Parameter "formset" should contain a valid Django Formset.

I have looked at multiple examples, but none seem to work.

template:

<form action="{% url 'usermanager:organization_edit_details' organization.id %}" method="post" class="form">
      {% csrf_token %}
      {% bootstrap_form form layout='inline' %}
      {%bootstrap_formset formset %}
      {% buttons %}
      <button type="submit" class="btn btn-primary">
      {% bootstrap_icon "star" %}Submit
    </button><button  class="btn btn-primary">Cancel -dead</button>
    {% endbuttons %}
    </form>

view.py

def organization_edit_details(request, organization_id):
    organization = get_object_or_404(Organization, pk=organization_id)
    form = OrganizationForm(request.POST or None, request.FILES or None, instance=organization)
    formset = StaffFormSet(request.POST or None, instance = organization)
    if form.is_valid():
        organization.organization_name = form.cleaned_data['organization_name']
        organization.description = form.cleaned_data['description']
        organization.rules = form.cleaned_data['rules']
        organization.open_times = form.cleaned_data['open_times']
        organization.website = form.cleaned_data['website']
        organization.email = form.cleaned_data['email']
        organization.street_name = form.cleaned_data['street_name']
        organization.street_number = form.cleaned_data['street_number']
        organization.postcode = form.cleaned_data['postcode']
        organization.country = form.cleaned_data['country']
        organization.kvk_number = form.cleaned_data['kvk_number']
        organization.save()
        if formset.is_valid():

            return HttpResponseRedirect(reverse('usermanager:organization_edit_details'))
    return render(request, 'user_manager/organizationEdit.html',{'organization':organization, 'form':form})

forms.py

from django.forms import ModelForm, Textarea, inlineformset_factory
from organizations.models import Organization, StaffMemberList

class OrganizationForm(ModelForm):
    class Meta:
        model = Organization
        fields = ['organization_name', 'description', 'rules','open_times',\
        'website', 'email', 'street_name', 'street_number', 'postcode', 'country']
        widgets = {
        'description': Textarea(attrs={'cols': 40, 'rows': 20}),
        'rules': Textarea(attrs={'cols': 40, 'rows': 15}),
        'open_times': Textarea(attrs={'cols': 40, 'rows': 7})
        }

class StaffForm(ModelForm):
    class Meta:
        model = StaffMemberList
        fields = ['username',]

StaffFormSet = inlineformset_factory(Organization, StaffMemberList, fields=('username',))

Trackeback:

Environment:


Request Method: GET
Request URL: http://localhost:8000/user/organizationmanager/1/edit/

Django Version: 1.10.4
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'organizations.apps.OrganizationsConfig',
 'news.apps.NewsConfig',
 'events.apps.EventsConfig',
 'user_manager.apps.UserManagerConfig',
 'bootstrap3',
 'django_forms_bootstrap',
 'registration',
 'debug_toolbar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']


Template error:
In template /home/dave/Projecten/Web/TotalMTB/user_manager/templates/user_manager/organizationEdit.html, error at line 19
   Parameter "formset" should contain a valid Django Formset.   9 : {% block content %}
   10 : <div class="row">
   11 :   <div class="col-xs-6 organization-edit">
   12 :     <h3>You are editing the page of: <b>{{ organization.organization_name }}</b></h3>
   13 : 
   14 :     {%if error_message %}<p><strong>{% bootstrap_form_errors form layout='inline' %}</strong></p>{% endif %}
   15 : 
   16 :     <form action="{% url 'usermanager:organization_edit_details' organization.id %}" method="post" class="form">
   17 :       {% csrf_token %}
   18 :       {% bootstrap_form form layout='inline' %}
   19 :        {%bootstrap_formset formset %} 
   20 :       {% buttons %}
   21 :       <button type="submit" class="btn btn-primary">
   22 :       {% bootstrap_icon "star" %}Submit
   23 :     </button><button  class="btn btn-primary">Cancel -dead</button>
   24 :     {% endbuttons %}
   25 :     </form>
   26 : </div>
   27 : </div>
   28 : {% endblock %}
   29 : 

Traceback:

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/dave/Projecten/Web/TotalMTB/user_manager/views.py" in organization_edit_details
  43.     return render(request, 'user_manager/organizationEdit.html',{'organization':organization, 'form':form})

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/shortcuts.py" in render
  30.     content = loader.render_to_string(template_name, context, request, using=using)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/loader.py" in render_to_string
  68.     return template.render(context, request)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render
  208.                     return self._render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/test/utils.py" in instrumented_test_render
  94.     return self.nodelist.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  174.         return compiled_parent._render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/test/utils.py" in instrumented_test_render
  94.     return self.nodelist.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  70.                 result = block.nodelist.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  70.                 result = block.nodelist.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render
  994.                 bit = node.render_annotated(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  961.             return self.render(context)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/django/template/library.py" in render
  203.         output = self.func(*resolved_args, **resolved_kwargs)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/bootstrap3/templatetags/bootstrap3.py" in bootstrap_formset
  268.     return render_formset(*args, **kwargs)

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/bootstrap3/forms.py" in render_formset
  30.     return renderer_cls(formset, **kwargs).render()

File "/home/dave/Projecten/Web/Django/venv/lib/python3.5/site-packages/bootstrap3/renderers.py" in __init__
  83.                 'Parameter "formset" should contain a valid Django Formset.')

Exception Type: BootstrapError at /user/organizationmanager/1/edit/
Exception Value: Parameter "formset" should contain a valid Django Formset.
1

There are 1 answers

0
Daniel Roseman On BEST ANSWER

You haven't passed anything called formset to the template, so bootstrap_formset can't render it.