2016-02-15 1 views
2

Salut, j'ai la requête suivante dans mon views.pyComment obtenir Substr des valeurs

m = Request.objects.filter(Q(type__icontains='4'), Q(wt__in =['giga','mega'])) 
context['all_items'] = m.values('type1').order_by('type1') 

Son donnant des valeurs sasoo, masoo, pisoo, kusoo etc.

Comment puis-je mettre en œuvre le Django Substr dans ce cas, de sorte que mon HTML les valeurs d'affichage en tant sa, ma, pi, ku, ..

+0

Sans Substr, cela vous donnera le même résultat: 'context ['all_items'] = [{'type1': x [0] ['type1'] [0: 1]} pour x dans m.values ​​('type1'). order_by ('type1')]' –

Répondre

2

Vous pouvez annotate le modèle

from django.db.models.functions import Substr 
m = Request.objects.filter(Q(type__icontains='4'), Q(wt__in =['giga','mega'])) 
context['all_items'] = m.annotate(mysubstring=Substr('type1',1,2)).order_by('type1') 

dans le modèle:

{% for obj in all_items %} 
    {# Use obj.mysubstring #} 
{% endfor %} 
+0

Salut Sayse: J'ai essayé ça. Mais j'obtiens cette erreur 'Aucun module nommé fonctions'. Une idée? – vellattukudy

+0

@vellattukudy - Quelle version de django utilisez-vous? – Sayse

+0

@Sayse: est-ce important si order_by est avant ou après l'annotation? Il semble que oui, avec moins de lettres le type peut être différent –

0

Une doublure

context['all_items'] = [i[:2] for i in context['all_items']] 
+0

Si cela se base sur le code original de l'op alors ça ne fonctionnera pas puisque vous ne pouvez pas trancher les objets du dictionnaire – Sayse

1

Vous pouvez utiliser slice filtre dans votre modèle:

{% for item in all_items %} 
    {{ item.type1|slice:":2" }} 
{% endfor %}