/ / djangoモデルの表示名のリスト-django、テンプレート、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 })

これにより、render_to_responseで渡される「field_list」変数のデータベース内のすべての「タイプ」エントリの個別のリストが得られます。ただし、次のようなリストは必要ありません。

SG

MV

次を示すリストが必要です。

映画

テンプレートにいた場合、個々のオブジェクトごとにこれを行うことができます

object.get_type_display

しかし、テンプレートに出力するためのフルネームとして、データベース内のすべての一意の「タイプ」エントリのリストを取得するにはどうすればよいですか?

この質問が明確に説明されたことを願っています。 。 。

回答:

回答№1は2

choice_list()の最後にあるこのようなものはどうですか?

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

または、dict()呼び出しなしの1行で:

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

きれいではありませんが、より良いものに出くわすまで機能します。


回答№2の場合は1

あなたが使用することができます:

OBJECT.get_FIELD_display()

例:

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

ctype = content.get_type_display()

回避策は必要ありません:)