Soy un principiante en Django y Python, y recientemente encontré varios métodos en documentos de Django, como Model.get_FOO_display(). La página de ayuda dice que puede sustituir FOO por el nombre de un campo. He estado tratando de descubrir cómo es posible esto en Python y busqué en la clase 'Modelo'. Allí me encontré con esto:¿Cómo funciona get_FIELD_display (en django)?
def _get_FIELD_display(self, field):
value = getattr(self, field.attname)
return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
No puedo entender cómo es posible que en Python a: 1) a escribir este
class Person(models.Model):
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
p = Person(name='John', gender='M')
p.get_gender_display()
Así que, ¿cómo funciona el 'cambio' Python campo (o FOO) en el género? ¿Es algún tipo de notación "malvada" de Python? (Lo siento, no puedo preguntar más claramente) ¿Coud apuntas a alguna página man de Python?
2) ¿por qué la fuente de la clase Model declara _get_FIELD_display() con el subrayado inicial, pero el extracto de Python doc desde arriba escribe "p.get_gender_display()" sin el guión bajo? Nuevamente, ¿podría dar una página de hombre de Python para esto?