Django动态查询过滤器

时间:2020-03-13 12:50:01

标签: python django

此代码效果很好

//  Your activity's onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        List<Fragment> lsActiveFragments = getSupportFragmentManager().getFragments();
        for (Fragment fragmentActive : lsActiveFragments) {

            if (fragmentActive instanceof NavHostFragment) {

                List<Fragment> lsActiveSubFragments = fragmentActive.getChildFragmentManager().getFragments();
                for (Fragment fragmentActiveSub : lsActiveSubFragments) {

                    if (fragmentActiveSub instanceof FragWeAreInterestedIn) {
                        fragmentActiveSub.onActivityResult(requestCode, resultCode, data);
                    }

                }

            }

        }

    }

但是现在我下面有这样的列表,并且想要动态地进行过滤。

from django.db.models import Q
filtered = Article.objects.filter(Q(authers__id=2) | Q(issues__id=1) | Q(issues__id=3) )

如何进行查询?

2 个答案:

答案 0 :(得分:1)

如果仅具有一个字段的值列表,则最好使用'in' filter

ids = [1,2,3]
articles = Article.objects.filter(authers__id__in=ids)

否则,要迭代创建“ OR”过滤器:

from django.db.models import Q

filters = Q()
ids = [1, 2, 3]

for pk in ids:
    filters |= Q(authers__id=pk)

articles = Article.objects.filter(filters)

可用于通过多个模型字段和值进行动态过滤。

答案 1 :(得分:1)

在同一字段中查询不同的值(或条件),可以使用__in键。

 possibilities = [1,2,3]
 Article.objects.filter(field__in=posibilities)

对于动态查询,您还可以将** kwargs传递给过滤方法:

query_key = 'your_field_name__in'
Article.objects.filter(**{query_key:[1,2,3]#your search value})

您可以将多个模型字段添加到kwargs参数中:

query = {'field_1':value_1,'field_2':value_2,'field_3__contains':value_3}#for example
Article.objects.filter(**query)
相关问题