gpt4 book ai didi

python - Django - 使用字符串从查询集中调用属性

转载 作者:行者123 更新时间:2023-12-01 09:26:52 25 4
gpt4 key购买 nike

我试图循环不同的查询集,同时不重复太多,并且在使用查询集类时遇到了问题。这不一定完全是 Django 问题。

我想做的是使用我的键列表(对应于 django 模型的列名称)从这些列名称创建数据列表,我想做的是这样的:

if needthisdata==1:
needdata=['column1', 'column2', 'column3']
else:
needdata=['column1', 'column4', 'column7']
entry=djangomodel.get.all().filter(identifier='id')
dictitems=[]
for n in range(0, len(needdata)):
if n==0:
dictitems=[entry.needdata[n]]
else:
dictitems.append(entry.needdata[n])

这当然不起作用,因为查询集没有需要的数据属性,有没有办法以这种方式调用带有字符串的类的属性?

最佳答案

用于获取单个条目的有效 Django 语句

首先,这里存在一些语义问题:

  • itentifier 可能应该是 identifieridpk
  • 您立即使用.all,而不是首先获取管理器(可能是.objects);和
  • 您在这里使用查询集上的 .filter(..) 来过滤标识符,但通常应该是 .get(..),因为通过使用过滤器,可以在可迭代中返回零个、一个或多个结果。
entry = djangomodel.objects<b>.get(id=some_id)</b>

现在我们获得了一个条目,但这当然不能解析获取列。

如果所有元素都是真实 Django 列

如果列是真正的 Django 字段(因此没有 @property 等),那么我们可以使用 values_list,并执行 list(. .) 构造函数:

dictitems = <b>list(</b>djangomodel.objects<b>.values_list(*needdata)</b>.get(id=some_id)<b>)</b>

如果某些元素是@propertys

如果并非所有这些字段都是真正的 Django 字段,那么我们可以使用 attrgetter 代替:

<b>from operator import attrgetter</b>

dictitems = <b>list(attrgetter(*needdata)(</b>djangomodel.objects.get(id=some_id)<b>))</b>

关于python - Django - 使用字符串从查询集中调用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com