2010-09-19 11 views
1

Ceci est mon étiquette de modèle dans un forloopDjango plusieurs à plusieurs dans le modèle

{{ product.feature_set.all.1.value }} 

je veux changer le numéro 1 à la forloop.counter. Est-ce que c'est posible?

aime:

{{ 
product.feature_set.all.forloop.counter.value 
}} 

Il ne fonctionne pas comme ça, mais est-il un moyen de le faire?

Répondre

7

Cela n'a aucun sens. Vous devriez être en boucle à travers le jeu de requête lui-même.

{% for feature in product.feature_set.all %} 
    {{ feature }} 
{% endfor %} 
+0

pas ce n'est pas ce que je veux. Je sais que tu peux le faire. Je le veux comme je l'ai demandé. Est-ce possible ou pas? – Harry

4

Puisque la réponse de Daniel ne vous satisfait pas, j'ai pensé que vous pourriez essayer d'écrire un filtre personnalisé. Voici un brouillon:

@register.filter 
def custom_m2m(queryset, forloop_counter): 
    return queryset[forloop_counter].value 

Vous pouvez l'utiliser dans votre modèle comme celui-ci:

{% for ... %} 
    {{ product.feature_set.all|custom_m2m:forloop.counter }} 
{% endfor %} 
+0

C'est le meilleur et le seul moyen que je sais comment faire cela. La raison en est que product.feature_set.all.forloop.counter va essayer product.feature_set.all.forloop et arrêter d'essayer une fois qu'il se rend compte que ce n'est pas possible. – Jake