Django get display name choices
30,462
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 ''
template
{% load archive_tag %}
{% for article in articles %}
{% for item in article.archive_quality %}
{{ item|quality }},
{% endfor %}
{% endfor %}
Comments
-
Soy Latam almost 2 years
I'm trying to find a solution to my problem.
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 %}
Update The function archive_quality is important, because it prevents recurrence in the template objects.
Example: article: My article one Archive: quality: 1111222333 >> without the function quality: 123 >> with function
-
Soy Latam about 11 yearswow thanks all work find. You can use forloop.last to see if there is a second object. Thanks for helping.
-
user1415785 almost 6 yearsreturn dict(CHOICES_QUALITY).get(q) is shorter