2013-04-13 116 views
7

我試圖找到解決我的問題的方法。Django獲取顯示名稱選項

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 %} 

更新 功能archive_quality是很重要的,因爲它可以防止復發的模板對象。

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

您就可以完成models.py。你的forloop錯過了模型的變量 – catherine

+0

@catherine當然,只需添加完整的模型。 –

+0

所有的選擇都真的是「1」嗎? – Koterpillar

回答

9

選項#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) 

模板

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

選項#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 '' 

模板

{% load archive_tag %} 

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

謝謝大家的工作發現。你可以使用forloop.last來查看是否有第二個對象。感謝您的幫助。 –