使用列名称的辅助列表访问Django Queryset的值

时间:2019-07-12 10:01:54

标签: python django list django-queryset

我正试图避免在我的代码中出现硬编码情况

如果有一个客户查询集,例如,列是(姓名,电话,电子邮件…。)

所以我愿意

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 = ['名称','电话','电子邮件']

当我这样做

for loop 

if customer.list[i] == some variable


我收到一个错误,客户不包含属性列表

如何解决这个问题

预先感谢

1 个答案:

答案 0 :(得分:2)

您应该在此处使用{ getattr(..) [Python-doc]](https://docs.python.org/3/library/functions.html#getattr)。您可以将条件替换为:

if any(getattr(customer, li) == some_variable for li in mylist):
    # ...

尽管将所有本质上是正交尺寸的字段与相同变量进行比较看起来很奇怪。