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

Возвращает кортеж со значением

Вернуться на верх