2017-09-28 3 views
0

Je travaille avec un formset_facotry et j'ai un problème pour essayer de trouver quelque chose.Sélection d'un objet spécifique de la liste dans le modèle django

J'ai une liste d'utilisateurs retournés à partir d'un jeu de requête dans un fichier views.py. J'ai également une liste de formulaires qui sont créés en fonction du nombre d'objets retournés à partir de la requête de liste. Ce que je veux arriver, c'est qu'il sélectionne le premier objet retourné et l'affiche avant le premier formulaire à afficher. saisir ensuite le deuxième objet et affiché juste avant la deuxième forme et ainsi de suite ... idée générale derrière elle est le followoing:

Je veux faire quelque chose comme ce modèle général:

header = 'Add record' + groupName 
if message: 
    print(message) 
count = 0 
for f in form: 
    expenses[0] 
    f.as_p 
    count = count + 1 

I veulent saisir un élément spécifique en fonction du nombre dans la boucle:

Voici le code que j'ai dans le modèle:

{% extends "base.html" %} 

{% block content %} 
    <h2>Add expense - {{ currentGroup.name }}</h2> 
    {% if message %} 
    <p>{{message}}</p> 
    {% endif %} 
    <form action="." method="POST"> 
    {% csrf_token %} 
    {{ form.management_form }} 
    {% with count=0 %} 
     {% for f in form %} 
     {% for expense in expenses %} 
      <p>{{ expense.user.username }}</p> 
     {% endfor %} 
     {{ f.as_p }} 
     {% endfor %} 
    {% endwith %} 
    <input type="submit" name="submit" value="submit"> 
    </form> 
{% endblock %} 

quelqu'un peut me aider à comment itérer et spécifier un certain objet dans un objet défini dans le modèle html

Répondre

1

Je pense que ci-dessous le code fonctionnera pour vous avec des boucles de modèle

{% for f in form %} 
    {% for expense in expenses %} 
     {% if forloop.parentloop.counter == forloop.counter %} 
      <p>{{ expense.user.username }}</p> 
     {% endif %} 
    {% endfor %} 
    {{ f.as_p }} 
{% endfor %} 
+0

Il a parfaitement fonctionné. que vous tant pour cela. Je l'apprécie vraiment @neerajkumar –

0

Vous pouvez accéder à forloop.counter qui est un compteur de base 1:

{% for expense in expenses %} 
    {% if forloop.counter == 25 %} # this is the 25th, not 26th item 
     do stuff 
    {% endif %} 
{% endfor %} 
0

on dirait que vous cherchez python's zip() function, qui se joindra à deux listes pour vous permettre de itérer ensemble. Vous devez zipper les listes dans la vue, puis parcourir la nouvelle liste dans le modèle.

De l'avis:

forms_and_users = zip(forms_list, users_list) 
# Add forms_and_users to template context 

Dans le modèle

{% for form, user in forms_and_users %} 
    {{ user }} 
    {{ form }} 
{% endfor %}