python - 通过迭代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
解决方案
对于您在问题中所做的方式
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)
这将返回一个包含值的元组
推荐阅读
- kubernetes - GKE ingress resource returns 404 although it is connected to a service
- python - Newbie question regarding @app.route("/index")
- spring - Jhipster Oauth2 + Keycloak User identity duplicated
- javascript - 触发方法的rxjs倒计时
- python - ZeroDivisionError: integer division or modulo by zero i cant see any error
- html - 为什么 google.script.run 在 HTML 中不起作用?
- c - C中的未定义函数
- twitter-bootstrap - 如何在引导程序 5 中将卡片居中
- swift5 - 线程 1:“-[UITableViewController loadView] 加载了“Bf3-ih-lsC-view-YnG-aC-da7” nib,但没有得到 UITableView。”
- python - Python包没有setup.py,