Динамически получать значение объекта модели путем итерации модели 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)
Возвращает кортеж со значением