1

在这种情况下,要求是我能够通过字符串属性访问评估的QuerySet 的成员name。我不喜欢在 QuerySet 上循环的想法,因为似乎有一种更有效的方法。

在我打电话给类似的东西之后:

my_objects = MyObject.objects.all()

我用类似的东西来评估它:

len(my_objects)

在这种情况下,从评估的 QuerySet 中按名称获取特定结果的最佳方法是什么my_objects?理想情况下,我希望看到类似my_objects.filter(foo='bar').

请注意,在此过程中,我需要评估的 QuerySet 中的所有结果,这就是我在一个初始查询中拥有它的原因。

4

2 回答 2

2

没有直接的方法可以根据查询集中的字段值获取对象。但是您可以做的一件事是从查询集创建一个字典并设置name为键(必须是唯一的):

my_objects = MyObject.objects.all()
obj_dict = {obj.name: obj for obj in my_objects}
print obj_dict['any_name']

仅供参考:如果您只想从表中检索单个对象,则可以使用.get方法:

obj = MyObject.objects.get(pk=id)
or
obj = MyObject.objects.get(name='unique_name')
于 2013-01-04T16:12:59.130 回答
0

评估的查询集是一个列表。列表元素没有索引,因此无论如何都需要循环。但是假设评估的查询集不是那么大,最多几百个条目,所以循环是可以的。不要评估大型查询集。

顺便说一句,类似的对象列表由prefetch_related(). 有一个实现ListQuerySet支持许多过滤器、排序和不同的过滤器,从而可以对这样的对象列表运行许多(尽管不是全部)查询:

https://github.com/Dmitri-Sintsov/django-jinja-knockout/blob/master/django_jinja_knockout/query.py

于 2017-05-22T20:55:54.893 回答