timefiled - models textfield django




Accedere ai campi del modello Django usando una stringa anziché la sintassi del punto? (3)

Altre risposte rimangono valide, ma ora puoi farlo usando _meta.get_field () di Django.

test._meta.get_field('name')

Si noti che l'API Model _meta ha iniziato il supporto e la documentation ufficiali a partire da 1.8, ma è stata distribuita e utilizzata nelle versioni precedenti prima della documentazione ufficiale.

In Django, posso farlo:

test = Test.objects.get(id=1)
test.name

Voglio poter accedere alle proprietà utilizzando stringhe generate dinamicamente, come questo:

test['name']

o qualsiasi altra sintassi usando una stringa. Provai

test._meta.get_field_by_name('name')

ma questo restituisce il campo stesso e non il valore.

Qualche idea?


In Python, puoi normalmente accedere ai valori all'interno di un oggetto che ha un metodo dict .

Diciamo che hai questa classe:

class Dog(object):
    def __init___(self, color):
        self.color = color

E poi lo istanziamo:

dog = Dog('brown')

Quindi posso vedere il colore facendo:

print dog.color

Posso anche vedere il colore facendo:

print dog.__dict__['color']

Posso impostare il colore:

print dog.__dict__['color'] = 'green'

print dog.color

>>>green

Supponendo che il nome sia un attributo sul tuo test di istanza , getattr(test, 'name') dovrebbe restituire il valore corrispondente. Oppure test.__dict__['name'] .

Puoi leggere ulteriori informazioni su getattr() qui: http://effbot.org/zone/python-getattr.htm





django-models