Я новичок в Django и Python и недавно наткнулся на ряд методов в документах Django, таких как Model.get_FOO_display(). На странице справки говорится, что вы можете заменить FOO на имя поля. Я пытался выяснить, как это возможно в Python и заглядывает в класс "Модель". Там я натолкнулся на это:
def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
Я не могу понять, как это возможно в Python: 1), чтобы написать это
class Person(models.Model):
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
p = Person(name='John', gender='M')
p.get_gender_display()
Итак, как Python "изменяет" FIELD (или FOO) на пол? Это какая-то "злая" нотация Питона? (Извините, я не могу спросить более четко) Coud вы указываете на какую-то страницу руководства Python?
2) почему источник из класса Model объявляет _get_FIELD_display() с лидирующим подчеркиванием, но извлечение извлечения из Python из вышеперечисленного записывает "p.get_gender_display()" без подчеркивания? Опять же, не могли бы вы дать для этого страницу руководства Python?