Di sini saya membuat formulir untuk mengambil nama grup dari pengguna dan kemudian mencoba membuat nama grup dengan nama yang dimasukkan oleh pengguna tetapi tidak memberi saya hasil yang diharapkan. Itu tidak menimbulkan kesalahan atau menyimpan data dalam database. Ketika saya menggunakan group_name = request.POST['name'] alih-alih cleaned_data ia melempar:

django.utils.datastructures.MultiValueDictKeyError: 'name'

Apa yang saya lakukan salah di sini?

Form.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})

Templat

<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>
0
Hello 20 September 2019, 08:44

1 menjawab

Jawaban Terbaik

Karena clean_data Anda kosong untuk
form = AddUserGroupForm() jika Anda ingin mengakses data

Lakukan form = AddUserGroupForm(request.POST)

Sehingga data akan dibersihkan sesuai dengan permintaan POST dan memanggil is_valid() di atasnya.

Jika Anda ingin menambahkan validasi, tambahkan di clean metode kelas formulir, lihat disini

Seharusnya seperti ini

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})
0
Yugandhar Chaudhari 20 September 2019, 06:04