In Django kann ich das tun:
test = Test.objects.get(id=1)
test.name
Ich möchte in der Lage sein, mit dynamisch generierten Zeichenfolgen wie folgt auf die Eigenschaften zuzugreifen:
test['name']
oder eine andere Syntax, die eine Zeichenfolge verwendet. Ich habe es versucht
test._meta.get_field_by_name('name')
Dies gibt jedoch das Feld selbst und nicht den Wert zurück.
Irgendwelche Ideen?
django
django-models
Davidcolgan
quelle
quelle
self.getattr(SelfModelName, 'id')
= ??Angenommen, der Name ist ein Attribut in Ihrem Instanztest ,
getattr(test, 'name')
sollte den entsprechenden Wert zurückgeben. Odertest.__dict__['name']
.Weitere Informationen finden Sie
getattr()
hier: http://effbot.org/zone/python-getattr.htmquelle
Andere Antworten stehen noch, aber jetzt können Sie dies mit Djangos _meta.get_field () tun.
test._meta.get_field('name')
Beachten Sie, dass die Model _meta-API ab 1.8 ihre offizielle Unterstützung und Dokumentation begonnen hat , jedoch vor ihrer offiziellen Dokumentation in früheren Versionen verteilt und verwendet wurde.
quelle
In Python können Sie normalerweise auf Werte innerhalb eines Objekts zugreifen, das über eine Diktiermethode verfügt .
Angenommen, Sie haben diese Klasse:
class Dog(object): def __init___(self, color): self.color = color
Und dann instanziiere ich es:
dog = Dog('brown')
So kann ich die Farbe sehen, indem ich:
print dog.color
Ich kann die Farbe auch sehen, indem ich:
print dog.__dict__['color']
Ich kann die Farbe einstellen:
print dog.__dict__['color'] = 'green' print dog.color >>>green
quelle
getattr
ist es verfügbar und daher die richtige Wahl.