首页 > 解决方案 > 通过迭代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
            

标签: pythondjangodjango-modelsdjango-rest-framework

解决方案


对于您在问题中所做的方式

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)

如果您只需要一个值,请使用带有 flat=True 的 values_list

fields = User.objects.all().values_list('first_name', flat=True)

这将返回一个包含值的元组


推荐阅读