0

Here I made a form for taking the group name from the user and then tried to create group name with that name entered by user but it is not giving me the expected result.It is neither throwing any error nor saving the data in the database. When i used group_name = request.POST['name'] instead of cleaned_data it throws:

django.utils.datastructures.MultiValueDictKeyError: 'name'

What I am doing wrong here ?

forms.py

class AddUserGroupForm(forms.Form):
    name = forms.CharField(max_length=255)

views.py

def add_user_groups(request):
    form = AddUserGroupForm()
    #group_name = request.POST['name']
    #print(group_name,'group_name')
    if form.is_valid():
        group_name = form.cleaned_data['name']
        permissions = request.POST.getlist('user_permissions')
        new_group = Group.objects.create(name=group_name)
        new_group.permissions.add(permissions)
        messages.success(request,'New group added.')
        return redirect('organization:view_groups')
    return render(request,'organization/add_user_groups.html',{'user_permissions':user_permissions,'form':form})

template

<form action="{% url 'organization:add_user_group' %}" method="post">
                    {% csrf_token %}
    <label> Group Name : </label>
       <input type="text" class="form-control required" placeholder="Enter 
            group name" name="name">
                    <label>Permissions:</label>
                    {% for permission in user_permissions %}
                        <input name="user_permissions" type="checkbox" id="permission-{{permission.id}}"
                          value="{{permission.id}}">
                        <label for="permission-{{permission.id}}"> {{permission.name}}</label>


                    </div>
                    {% endfor %}                               
<button type="submit" class="btn btn-info">Submit</button>
         </div>
</form>
Hello
  • 312
  • 1
  • 5
  • 14

1 Answers1

0

Because your cleaned_data is empty for
form = AddUserGroupForm() if you want to access the data

do form = AddUserGroupForm(request.POST)

so that data will be cleaned according to POST request and call is_valid() on it.

If you wish add validation add it in clean method of form class see here

It should be like this

def add_user_groups(request):
  if request.method == 'POST':
    form = AddUserGroupForm(request.POST)
    #group_name = request.POST['name']
    #print(group_name,'group_name')
    if form.is_valid():
        group_name = form.cleaned_data['name']
        permissions = request.POST.getlist('user_permissions')
        new_group = Group.objects.create(name=group_name)
        new_group.permissions.add(permissions)
        messages.success(request,'New group added.')
        return redirect('organization:view_groups')
  else:
        #empty form for get request
        form = AddUserGroupForm()
  return render(request,'organization/add_user_groups.html',{'user_permissions':user_permissions,'form':form})
Yugandhar Chaudhari
  • 3,831
  • 3
  • 24
  • 40