2017-08-29 73 views
0

试图动态创建一个复选框列表,当选中它时将执行一个操作。我有按预期创建的复选框,并且我有一个按预期工作的操作。我似乎无法控制正确的框来执行操作。例如,当我单击第三个框或第二个和第三个框时,动作总是在第一个框中执行。我已验证POST数据正确传递了选中的框前缀和表单名称,但不知何故,我告诉代码,如果选中了一个框,请在第一个实例上执行操作,而不是在复选框或框上执行操作。以下是我有:Django迭代复选框

forms.py

class remove_resource(forms.Form): 
    active = forms.BooleanField(label_suffix='', label='', required=False) 

views.py

def edit_project_resource (request, offset): 
list_resources = Allocation.objects.filter(project_id=offset).filter(active=True).order_by('user_id').distinct('user_id') 


display = {} 
for r in list_resources: 
    check = remove_resource(prefix = r.pk) 
    display[r.user_id] = (check, r.user_id) 
    if request.method == 'POST': 
     check = remove_resource(request.POST, prefix = r.pk) 
     if check.is_valid(): 
      if request.POST.get(check, True): 
       Allocation.objects.filter(project_id=offset).filter(user_id = r.user_id).update(active=False) 

       return HttpResponseRedirect('/project_profile/%s/' % offset) 

回答

0

貌似问题是在检查POST字典。以下是该行改为的内容,现在可以使用。

if request.POST.get("%s-%s" % (r.pk, 'active')): 

尽我所知,这基本上是寻找在后字典的值,因为我加入前缀每个复选框,我需要返回“前缀处于激活状态”,其中前缀是的搜索查询r.pk和活动是表单名称。

如果我没有描述如何正确工作,请更正此答案。