Shi*_*dla 9 python django list django-queryset
我有一个queryset(实际过滤),如下所示
posts = [<Post: published>, <Post: needs>, <Post: be>, <Post: issues>, <Post: to>, <Post: tags>]
Run Code Online (Sandbox Code Playgroud)
但我需要手动过滤上面的查询集,其中一些字段来自另一个表/地方等.
所以我过滤了下面的东西
custom_list = []
for rec in posts:
if 'string_or_field' in rec.tags.all():
custom_list.extend(rec)
or
custom_list = [rec for rec in posts if 'string_or_field' in rec.tags.all()]
Run Code Online (Sandbox Code Playgroud)
因此,正如我们可以在上面观察到的那样,我们list
通过过滤a 来创建一个queryset
,但我希望结果为a queryset
.
那么有没有办法将其转换list
为queryset
对象?
Pau*_*ida 11
您可以先查询Tag
对象并Post
使用这些ID进行过滤:
tags = Tag.objects.filter(field_name='string_or_field')
posts = Post.objects.filter(tags__in=tags)
Run Code Online (Sandbox Code Playgroud)
Shi*_*dla 10
实际上我通过谷歌搜索找到了一种方法,但如果有大量的记录,这可能需要花费大量的时间来查询/生成结果
custom_list = [rec.id for rec in posts if 'string_or_field' in rec.tags.all()]
querset = MyModel.objects.filter(id__in=custom_list)
Run Code Online (Sandbox Code Playgroud)
如果每个列表项已存在于数据库中,则前面的答案是正确的,但有时情况并非如此。在这种情况下,您可以根据列表创建查询集存根,并根据需要实现查询集方法和查询集属性。
class ListAsQuerySet(list):
def __init__(self, *args, model, **kwargs):
self.model = model
super().__init__(*args, **kwargs)
def filter(self, *args, **kwargs):
return self # filter ignoring, but you can impl custom filter
def order_by(self, *args, **kwargs):
return self
qs = ListAsQuerySet(custom_list, model=Post)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12921 次 |
最近记录: |