/ / Список відображуваних імен з моделей django - django, templates, choicefield

Список відображуваних назв з моделей django - django, templates, choicefield

У мене є об'єкт:

POP_CULTURE_TYPES = (
("SG","Song"),
("MV", "Movie"),
("GM", "Game"),
("TV", "TV"),
)

class Pop_Culture(models.Model):
name = models.CharField(max_length=30, unique=True)
type = models.CharField(max_length=2, choices = POP_CULTURE_TYPES, blank=True, null=True)

Тоді я маю функцію:

def choice_list(request, modelname, field_name):
mdlnm = get.model("mdb", modelname.lower())
mdlnm = mdlnm.objects.values_list(field_name, flat=True).distinct().order_by(field_name)
return render_to_response("choice_list.html", {
"model"  : modelname,
"field"  : field_name,
"field_list"  : mdlnm })

Це дає мені окремий список всіх записів "типу" в базі даних у змінній "field_list", що передається в render_to_response. Але я не хочу, щоб список містив:

SG

М.В.

Я хочу отримати список, який показує:

Пісня

Фільм

Я можу зробити це на основі окремого об'єкта, якщо я був у шаблоні

object.get_type_display

Але як отримати список всіх унікальних записів типу "тип" у базі даних, як їхні повні назви для виведення в шаблон?

Сподіваюся, це питання було чітко описано. . .

Відповіді:

2 для відповіді № 1

Як щодо подібного в кінці вашого списку вибору ()?

def choice_list(request, modelname, field_name):
# ...
pct = dict(POP_CULTURE_TYPES)
return [pct[key] for key in mdlnm]

Або в одному рядку без виклику dict ():

    return [pct[1] for pct in POP_CULTURE_TYPES if pct in mdlnm]

Не гарний, але він буде працювати, поки не побіжить щось краще.


1 для відповіді № 2

Ви можете використовувати:

OBJECT.get_FIELD_display()

Приклад:

content = Pop_Culture.objects.get(...)

ctype = content.get_type_display()

Немає необхідності в обхідних шляхах :)