2013-04-13 15 views
7

Ich versuche, eine Lösung für mein Problem zu finden.Django Anzeige Name Optionen

models.py

class Article(models.Model): 
    title = models.CharField(max_length=100) 
    slug = models.SlugField() 
    description = models.TextField() 

def archive_quality(self): 
    return self.archive_set.order_by('-quality').distinct().values_list('quality', flat=True) 


class Archive(models.Model): 
    CHOICES_QUALITY = (
     ('1', 'HD YB'), 
     ('2', 'HD BJ'), 
     ('3', 'HD POQD'), 
     ('4', 'HD ANBC'), 
    ) 
    article = models.ForeignKey(Article) 
    quality = models.CharField(max_length=100, choices=CHOICES_QUALITY) 

arhives.html

{% for article in articles %} 
    {{ article }} 
    {% for quality in article.archive_quality %} 
     {{ quality.get_quality_display }}#This is not working 
    {% endfor %} 
{% endfor %} 

aktualisieren Die Funktion archive_quality ist wichtig, da es erneut in den Objekten Vorlage verhindert.

Example: 
article: 
    My article one 
Archive: 
     quality: 1111222333 >> without the function 
     quality: 123 >> with function 
+0

Sie Ihre models.py abschließen können. Ihr Forloop hat die Variable aus dem Modell – catherine

+0

@ Catherine verpasst. Sicher, fügen Sie einfach das vollständige Modell hinzu. –

+0

Sind alle Entscheidungen wirklich "1"? – Koterpillar

Antwort

9

Option # 1:

models.py

CHOICES_QUALITY = (
    ('1', 'HD YB'), 
    ('2', 'HD BJ'), 
    ('3', 'HD POQD'), 
    ('4', 'HD ANBC'), 
) 

class Article(models.Model): 
    title = models.CharField(max_length=100) 
    slug = models.SlugField() 
    description = models.TextField() 

    def archive_quality(self): 
     quality = self.archive_set.order_by('-quality').distinct().values_list(
      'quality', flat=True) 
     lists = [] 
     for q in quality: 
      for choice in CHOICES_QUALITY: 
       if choice[0] == q: 
        lists.append({'quality': choice[1]}) 
     return lists 

class Archive(models.Model): 
    article = models.ForeignKey(Article) 
    quality = models.CharField(max_length=100, choices=CHOICES_QUALITY) 

template

{% for article in articles %} 
    {% for item in article.archive_quality %} 
     {{ item.quality }}, 
    {% endfor %} 
{% endfor %} 

Option # 2:

archive_tag.py

from django import template 
from app_name.models import CHOICES_QUALITY 

register = template.Library() 

@register.filter 
def quality(q): 
    for choice in CHOICES_QUALITY: 
     if choice[0] == q: 
      return choice[1] 
    return '' 

Vorlage

{% load archive_tag %} 

{% for article in articles %} 
    {% for item in article.archive_quality %} 
     {{ item|quality }}, 
    {% endfor %} 
{% endfor %} 
+0

wow danke alle arbeiten finden. Sie können forloop.last verwenden, um festzustellen, ob ein zweites Objekt vorhanden ist. Danke fürs Helfen. –