Dado un campo;Opciones de campo modelo Django: ¿no sería mejor un dict?
domain_status_choices = (
(1,'Live')
(2,'Offline')
(3,'Dev')
)
status = models.SmallIntegerField(choices=domain_status_choices)
Sé que puedo conseguir y representación numérica configurar y utilizar get_status_display()
para obtener la etiqueta de texto. Pero si un usuario publica status=Offline
, ¿cómo puedo obtener el valor numérico para guardarlo? También me gustaría poder validar que los números o valores de texto están en la lista.
Para mí tiene más sentido usar un dict. Aquí está mi método actual;
domain_status_choices = {
1: 'Live',
2: 'Offline',
3: 'Dev',
}
status = models.SmallIntegerField(choices=domain_status_choices.iteritems())
...
if input1 not in domain_status_choices.keys(): print "invalid"
if input2 not in domain_status_choices.items(): print "invalid"
status = [k for k, v in domain_status_choices.iteritems() if v == input3][0]
¿Hay una manera mejor? ¿Por qué se usa generalmente una tupla de tuplas?
¿Ha intentado utilizar collections.OrderedDict para este caso de uso? (Para preservar el orden de las opciones) http://pymotw.com/2/collections/ordereddict.html –