首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:从request.GET到QuerySet

Django:从request.GET到QuerySet
EN

Stack Overflow用户
提问于 2019-12-11 22:48:52
回答 3查看 372关注 0票数 1

我知道如何使用Django创建html表单,也知道如何访问request.GET中的值。

我知道如何使用ORM:MyModel.objects.filter(...)

现在我不知道如何从request.GET获取匹配的QuerySet

我在Django文档中找不到这个。

示例:

代码语言:javascript
复制
class MyModel(models.Model):
    name=models.CharField(max_length=1024)

如果request.GET包含name=foo,我希望有一个像MyModel.objects.filter(name__icontains=request.GET['name'])这样的过滤器。

我可以自己编写代码,但我认为这是在重新发明轮子。这对我来说太复杂了。

上面只是一个例子。我更喜欢配置而不是编码的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2019-12-11 23:07:40

我们可以在这里构造一个Q对象:

代码语言:javascript
复制
from django.db.models import Q

MyModel.objects.filter(
    Q([('{}__icontains'.format(k), v) for k, vs in request.GET.lists() for v in vs])
)

如果某个键在querystring中多次出现,这也是可行的。请注意,您查询的字段应支持 [Django-doc]查找。

此外,允许这样做可能是不安全的,因为例如黑客可能会尝试使用user__password来猜测用户的(散列)密码。

票数 1
EN

Stack Overflow用户

发布于 2019-12-11 23:13:08

你该这么做

代码语言:javascript
复制
        filters = {}
        for param, value in request.GET.items():
            filters['{}_icontains'.format(param)] = value

        queryset = MyModel.objects.filter(**filters)

参考https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.QueryDict.items

票数 1
EN

Stack Overflow用户

发布于 2019-12-16 20:08:21

您可以使用django-tables2django-filter

在这里解释:

Django-filter可用于生成类似于

管理员的list_filter界面的界面。它有一个非常类似于Django的ModelForms的API。例如,如果您有一个Product模型,您可以使用以下代码为其设置一个筛选集:

代码语言:javascript
复制
import django_filters

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = ['name', 'price', 'manufacturer']

在您看来,您可以这样做:

代码语言:javascript
复制
def product_list(request):
    filter = ProductFilter(request.GET, queryset=Product.objects.all())
    return render(request, 'my_app/template.html', {'filter': filter})

如何在django-tables2中使用django-filter,请参阅django-filter in django-table2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59288370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档