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'
답변
당신이 올바른 길 get_FOO_display()
을 가고있는 것 같습니다 – 가장 확실하게 당신이 원하는 것입니다 :
템플릿 에서는 ()
메소드 이름에 포함하지 않습니다 . 다음을 수행하십시오.
{{ person.get_gender_display }}
답변
선택 사항이 설정된 모든 필드에 대해 오브젝트에는 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 메소드가 필요한 것이라고 지적했습니다. 나는 이것을 사용하고있다 :
def get_type(self):
return [i[1] for i in Item._meta.get_field('type').choices if i[0] == self.type][0]
항목 유형과 일치하는 항목을 찾을 때까지 특정 항목의 모든 선택 사항을 반복합니다.