Python Django获取显示名称选项

Python Django获取显示名称选项,python,django,templates,Python,Django,Templates,我正试图找到解决我问题的办法 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').distinc

我正试图找到解决我问题的办法

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)
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)
arhives.html

{% for article in articles %}
    {{ article }}
    {% for quality in article.archive_quality %}
        {{ quality.get_quality_display }}#This is not working
    {% endfor %}
{% endfor %}
更新 函数存档质量很重要,因为它可以防止模板对象中的重复出现

Example:
article:
   My article one
Archive:
       quality: 1111222333 >> without the function
       quality: 123 >> with function
选项#1:

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)
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 %}
{% load archive_tag %}

{% for article in articles %}
    {% for item in article.archive_quality %}
        {{ item|quality }},
    {% endfor %}
{% endfor %}
选项2:

存档_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 ''
模板

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

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

你能完成你的模型吗。您的forloop错过了来自model@catherine当然,只需添加完整的模型。所有的选择是否真的
'1'
?@Koterpillar抱歉现在修复。哇,感谢所有的工作发现。可以使用forloop.last查看是否存在第二个对象。谢谢你的帮助。返回dict(选项和质量)。get(q)较短