使用列名的辅助列表访问 Django 查询集的值
Posted
技术标签:
【中文标题】使用列名的辅助列表访问 Django 查询集的值【英文标题】:Accessing the Value of a Django Queryset using a secondary list of column names 【发布时间】:2019-11-22 02:07:19 【问题描述】:我试图避免在我的代码中出现硬编码情况
如果有一个客户查询集,例如列是(姓名、电话、电子邮件……)
如果我这样做了
customer = Customer.objects.get(name = 'bbc')
# to get the values of each field I need to do
customer.name
customer.phone
customer.email
……
为了避免必须这样做,因为我需要比较 If 语句中的每个字段以不对表单进行任何更改,我创建了一个包含列名称的列表
if 语句示例
if customer.name == some variable or customer.email == some vairiable …..
我制作了一个包含列名的列表以避免此问题
list = ['name', 'phone', 'email']
当我这样做时
for loop
if customer.list[i] == some variable
我得到一个错误客户不包含属性列表
我该如何解决这个问题
提前致谢
【问题讨论】:
【参考方案1】:您应该在此处使用 getattr(..)
[Python-doc]](https://docs.python.org/3/library/functions.html#getattr)。您可以将条件替换为:
if any(getattr(customer, li) == some_variable for li in mylist):
# ...
虽然将所有字段(本质上是正交维度)与相同的变量进行比较看起来很奇怪。
【讨论】:
以上是关于使用列名的辅助列表访问 Django 查询集的值的主要内容,如果未能解决你的问题,请参考以下文章