Динамически получать значение объекта модели путем итерации модели django
я хочу получить значение динамически в модели django
users = User.objects.all()
for user in users:
print(user.first_name) # works fine
# now how to make it dynamic
onefield = "first_name"
print(user.onefield) # come error
# and for list of field name
fieldnames= ["first_name","last_name","email"]
for i in fieldnames:
print(user.i) # any shortcut for all value
Если динамические поля, к которым вы хотите получить доступ, являются строками, то используйте getattr().
fieldname = "first_name"
print(getattr(user, fieldname))
По тому, как вы поступаете в своем вопросе
fieldname = "first_name"
print(getattr(user, fieldname))
Вы также можете использовать другие способы получения значений, например:
fields = User.objects.all().values('first_name')
print(fields)
Возвращает QuerySet, который возвращает словари. Вы также можете использовать больше полей
fields = User.objects.all().values('id', 'first_name', 'last_name')
print(fields)
<QuerySet [{'id': 1, 'first_name': 'Barney', 'last_name': 'Stinson'}]>
Для распаковки
>>> qs = User.objects.all()
>>> values = ['first_name', 'email']
>>> qs.values(*values)
Если вам нужно только одно значение, используйте список values_list с flat=True
fields = User.objects.all().values_list('first_name', flat=True)
Возвращает кортеж со значением