У мене є об'єкт:
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()
Немає необхідності в обхідних шляхах :)