2017-08-29 4 views
0

Essayer de créer dynamiquement une liste de cases à cocher qui, une fois sélectionnées, effectueront une action. J'ai les cases à cocher créées comme prévu, et j'ai une action qui fonctionne comme prévu. Je n'arrive pas à saisir les bonnes cases pour effectuer l'action. Par exemple, lorsque je clique sur la troisième case, ou sur la deuxième et la troisième case, l'action est toujours effectuée sur la première case. J'ai vérifié que les données POST passent correctement les préfixes de cases cochées et le nom de formulaire, mais de toute façon je dis au code que si une case est cochée, effectuez l'action sur la première instance plutôt que sur la ou les cases cochées. Voici ce que j'ai:Django itérer sur les cases à cocher

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) 

Répondre

0

On dirait que la question était à vérifier le dictionnaire POST. Voici ce que cette ligne a changé et cela fonctionne maintenant.

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

mieux que je peux dire, cela est essentiellement la recherche d'une valeur dans le dictionnaire de poste et parce que je suis d'ajouter le préfixe pour chaque case, je dois retourner une requête de recherche de « préfixe actif » où le préfixe était r.pk et active était le nom du formulaire.

Veuillez corriger cette réponse si je ne décris pas comment cela fonctionne correctement.