2

私はオブジェクトを持っています:

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」変数内のデータベース内のすべての「type」エントリの個別のリストが得られます。しかし、次のようなリストは必要ありません。

SG

MV

次のようなリストが必要です。

映画

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

object.get_type_display

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

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

4

2 に答える 2

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]

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

于 2010-03-20T19:45:23.927 に答える
1

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

OBJECT.get_FIELD_display()

例:

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

ctype = content.get_type_display()

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

于 2011-06-01T14:03:59.953 に答える