2010-03-20 2 views
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 }) 

Это дает мне четкий список всех записей «типа» в базе данных в переменной «field_list», переданной в render_to_response. Но я не хочу список, который показывает:

SG

М.В.

Я хочу, чтобы список, который показывает:

Song

Movie

Я могу это сделать на основе индивидуального объекта, если я был в шаблоне

object.get_type_display 

Но как мне получить список всех уникальных записей типа в базе данных в качестве их полных имен для вывода в шаблон?

Надеюсь, этот вопрос был четко описан. , ,

ответ

2

Как насчет чего-то подобного в конце вашего выбора_list()?

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

Или в одной строке без вызова ДИКТ():

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

Не очень, но он будет работать до тех пор, пока перебегать что-то лучше.

+1

нет необходимости в Словарь [х [1] для й в POP_CULTURE_TYPES, если х in mdlnm] –

+0

+1 для Дмитрия. Благодаря! Дикт чувствовал себя немного грязным, но я знал, что кто-то предложит способ избавиться от dict(). – istruble

+0

Блестящий. Спасибо, вы двое! –

1

Вы могли бы использовать:

OBJECT.get_FIELD_display() 

Пример:

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

ctype = content.get_type_display() 

Там нет необходимости обходных путей :)

Смежные вопросы