使用列名的辅助列表访问 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 查询集的值的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 Django 中查询集的特定字段?

Django:具有多个查询集的 jQuery 自动完成

php中sql查询的列名

如何在 Java 程序中访问 SQL count() 查询的值

在 Django 模板中显示列名而不提前知道它们

如何在 django 的插入查询中动态使用列名