[python] 장고 : 선택 값 표시

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 ()의 문서


답변

다른 사람들은 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]

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


답변