2016-05-31 1 views
0

Je sais que ce n'est pas recommandé car cela devrait être fait dans la vue, mais j'ai un scénario dans lequel j'ai besoin de filtrer dans le modèle.Django filtre un ensemble de requêtes dans un modèle

J'ai sitefiles_set que je demande 2 ou 3 fois dans le même modèle et j'utilise if statements pour montrer les bons types de fichiers au bon endroit. (c'est tout une chose d'affichage)

donc dans mon modèle pour un type de fichier particulier (photos) ci-dessous, ive diviser les données en colonnes de tableau pour le rendre plus lisible dans la page. Cependant, le compteur forloop compte tous les fichiers, pas seulement ceux du if, donc dans mon affichage, j'ai 5 liens affichés dans la colonne de gauche, puis 8 liens dans le droit.

donc j'ai besoin de filtrer ceux qui ne sont pas des photos de cabinet au lieu d'utiliser un. mais j'ai besoin du même modèle pour que je puisse l'utiliser dans une autre section pour montrer un autre type.

Merci

<b>Cabinet Photos:</b><br/> 
       <table> 
        <tr> 
         <td> 
          <ul class="standard-list"> 
           {% for file in Site.sitefiles_set.all %} 
            {% if file.file_type.type == 'Cabinet Photo' %} 
            <li> 
             <a href="{{ MEDIA_URL }}{{ file.site_image }}" data-lightbox="sitephotos" data-title="{{ file.file_name }}"> 
              {{ file.file_name }} 
             </a> 
            </li> 
             {% if forloop.counter|divisibleby:"8" and file.file_type.type == 'Cabinet Photo' %} 
               </ul> 
              </td> 
              <td> 
               <ul class="standard-list"> 
             {% endif %} 
             {% if forloop.counter|divisibleby:"16" and file.file_type.type == 'Cabinet Photo' %} 
               </ul> 
              </td> 
             </tr> 
             <tr> 
              <td> 
               <ul class="standard-list"> 
             {% endif %} 
            {% endif %}          
           {% endfor %} 
          </ul> 
         </td> 
        </tr> 
       </table> 
+0

vous devez utiliser une balise de modèle puis –

+0

@MosesKoledoye comment puis-je faire cela? – AlexW

+0

utiliser le filtre templatetag avec | –

Répondre

0

je l'ai fait avec ce

from django import template 
from networks.models import SiteFiles 

register = template.Library() 

@register.assignment_tag 
def get_files_by_type(SiteFiles, type): 
    return SiteFiles.filter(file_type__type=type)