Django高级过滤

Django高级过滤,django,view,filter,django-queryset,Django,View,Filter,Django Queryset,我可以根据模型字段的选择筛选查询集吗 型号: COLORS = ( ('BLACK', 'black'), ('RED', 'red'), ('BLUE', 'blue'), //etc.. ) class Thing(Models.model): color = models.CharField(max_length=5, choices=COLORS) 视图: 有没有一种基于不同颜色选择的过滤方法?还有,有没有一种方法可以动态地编写此文件,以便所有

我可以根据模型字段的选择筛选查询集吗

型号:

COLORS = (
    ('BLACK', 'black'),
    ('RED', 'red'),
    ('BLUE', 'blue'),
    //etc..
)

class Thing(Models.model):
    color = models.CharField(max_length=5, choices=COLORS)
视图:

有没有一种基于不同颜色选择的过滤方法?还有,有没有一种方法可以动态地编写此文件,以便所有颜色选择都可以响应单个视图?

您想要这样吗

看法

所以当你访问http://yoursite/thisview/black 当你访问时,你会得到黑色的东西http://yoursite/thisview/red 你会得到红色的东西。

你想要这个吗

看法

所以当你访问http://yoursite/thisview/black 当你访问时,你会得到黑色的东西http://yoursite/thisview/red 你会得到红色的东西。

你应该观察物体。这可以帮助您根据用户选择的过滤颜色构造复杂的查询

更新并添加示例

假设要过滤多个颜色:

from django.db.models import Q

def filter_by_color(request):

    q = Thing.objects.filter(Q(color="BLACK") | Q(color="RED))
更新2如果用户使用复选框或类似选项选择颜色,则可以使用以下方法:

def filter_by_color(request):
    selected_colors = request.GET.getlist('colors')

    q = Thing.objects.filter(color__in=selected_colors)
你应该观察物体。这可以帮助您根据用户选择的过滤颜色构造复杂的查询

更新并添加示例

假设要过滤多个颜色:

from django.db.models import Q

def filter_by_color(request):

    q = Thing.objects.filter(Q(color="BLACK") | Q(color="RED))
更新2如果用户使用复选框或类似选项选择颜色,则可以使用以下方法:

def filter_by_color(request):
    selected_colors = request.GET.getlist('colors')

    q = Thing.objects.filter(color__in=selected_colors)

这很有帮助。但是如果您想在一个url中包含所有颜色选项http://yoursite/thisview/ 并且过滤视图中的颜色选择,每次用户选择不同的颜色时,是否需要使用ajax修改查询集?似乎有更好的方法…@NickB很抱歉,我没有得到你想要说的和想要实现的。我只是想问:有没有一种方法可以在不访问其他url的情况下以不同的方式过滤查询集?所以用户不必刷新页面?谢谢你的想法!这很有帮助。但是如果您想在一个url中包含所有颜色选项http://yoursite/thisview/ 并且过滤视图中的颜色选择,每次用户选择不同的颜色时,是否需要使用ajax修改查询集?似乎有更好的方法…@NickB很抱歉,我没有得到你想要说的和想要实现的。我只是想问:有没有一种方法可以在不访问其他url的情况下以不同的方式过滤查询集?所以用户不必刷新页面?谢谢你的想法!嗨,米凯尔。你能给我一个例子,说明在这种情况下你将如何使用Q对象吗?谢谢你的想法!嗨,尼克,我添加了一个例子。您打算如何将所选颜色从客户端传递到视图?嗨,Mikael。你能给我一个例子,说明在这种情况下你将如何使用Q对象吗?谢谢你的想法!嗨,尼克,我添加了一个例子。您计划如何将所选颜色从客户端传递到视图?