【问题标题】:User group is not creating?没有创建用户组?
【发布时间】:2020-01-21 03:51:44
【问题描述】:

在这里,我制作了一个表格,用于从用户那里获取组名,然后尝试使用用户输入的名称创建组名,但它没有给我预期的结果。它既没有抛出任何错误,也没有将数据保存在数据库。 当我使用group_name = request.POST['name'] 而不是cleaned_data 它抛出:

django.utils.datastructures.MultiValueDictKeyError: 'name'

我在这里做错了什么?

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

模板

<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>

【问题讨论】:

    标签: django user-permissions usergroups


    【解决方案1】:

    因为你的cleaned_data 是空的
    form = AddUserGroupForm() 如果你想访问数据

    form = AddUserGroupForm(request.POST)

    以便根据POST 请求清理数据并在其上调用is_valid()

    如果您希望添加验证,请将其添加到表单类的 clean 方法中,请参阅 here

    应该是这样的

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

    【讨论】:

    • 现在我在向它抛出的组添加权限时遇到问题unhashable type: 'list'
    • 你得到的是哪一行?
    • new_group.permissions.add(permissions) 这里
    • 首先从您获得的列表中创建Permission.objects.create() 的权限,然后添加应该是Permission 实例的权限
    • new_group.permissions.set(permissions) 工作,而不是 add
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 2018-06-23
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多