私はオブジェクトがあります:
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は2choice_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()
回避策は必要ありません:)