장고 : 선택 값 표시


245

models.py :

class Person(models.Model):
    name = models.CharField(max_length=200)
    CATEGORY_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
    to_be_listed = models.BooleanField(default=True)
    description = models.CharField(max_length=20000, blank=True)

views.py :

def index(request):
    latest_person_list2 = Person.objects.filter(to_be_listed=True)
    return object_list(request, template_name='polls/schol.html',
                       queryset=latest_person_list, paginate_by=5)

내가 호출 할 때 템플릿에서 person.gender, 내가 얻을 'M'또는 'F'대신 'Male''Female'.

코드 ( / ) 대신 값 ( 'Male'또는 'Female') 을 표시하는 방법은 무엇입니까?'M''F'



이 방법을 시도했습니다. 내 템플릿에서 다음을 사용하고 있습니다. 나머지 : 'person.get_gender_display ()'에서 '()'
Shankze

7
내 나쁜, person.get_gender_display 뒤에 '()'를 포함해서는 안됩니다. 지금 작동하고 있습니다. 감사.
Shankze

3
성별은 M 또는 F (1 문자 길이)이므로 문자 필드의 최대 길이를로 설정하는 것은 의미가 없습니다 200. max_lenght=1충분 하면 사이트의 효율성을 높이고 잘못된 데이터를 얻지 못하게됩니다. :)
Alejandro Garcia

답변:


502

당신이 올바른 길 get_FOO_display()을 가고있는 것 같습니다 - 가장 확실하게 당신이 원하는 것입니다 :

템플릿 에서는 ()메소드 이름에 포함하지 않습니다 . 다음을 수행하십시오.

{{ person.get_gender_display }}

이 방법은 귀중합니다. 그러나 메소드를 사용하는 것 외에 {{i.item.what_to_put_here}}에 저장된 값을 검색하는 방법은 무엇입니까?
KhoPhi

11
참고로 템플릿에 Jinja2를 사용하는 사람은 괄호를 포함해야합니다. {{ person.get_gender_display() }}
adam b

1
보너스 포인트 : JSON을 통해 정보를 전송하는 경우 (예 : 페이지 매김 시나리오)이를 수행하는 가장 좋은 방법은 무엇입니까? 모델을 하나씩 인스턴스화하고 get_field_display ()를 호출하는 오버 헤드가없는 것이 이상적입니다.
DylanYoung

7
거의 10 년 후에 장고를 사랑해야하며 그 대답은 여전히 ​​유효합니다! Thx +1하고 마시십시오.
Marc

1
어떻게 든 이것은 번역 된 텍스트를 가져 오지 않습니다. i18이 이미 웹 사이트에 구현 된 경우 번역 된 텍스트를 얻는 방법에 대한 아이디어가 있습니까?
Anoop Nair

16

선택 사항이 설정된 모든 필드에 대해 오브젝트에는 get_FOO_display () 메소드가 있습니다. 여기서 FOO는 필드 이름입니다. 이 메서드는 필드의 "사람이 읽을 수있는"값을 반환합니다.

뷰에서

person = Person.objects.filter(to_be_listed=True)
context['gender'] = person.get_gender_display()

템플릿에서

{{ person.get_gender_display }}

get_FOO_display ()의 문서


1

다른 사람들은 get_FOO_display 메소드가 필요한 것이라고 지적했습니다. 나는 이것을 사용하고있다 :

def get_type(self):
    return [i[1] for i in Item._meta.get_field('type').choices if i[0] == self.type][0]

항목 유형과 일치하는 항목을 찾을 때까지 특정 항목의 모든 선택 사항을 반복합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.