Django高级过滤

时间:2012-10-30 06:22:20

标签: 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)

视图:

def filter_by_color(request):
    q = Thing.objects.filter(???) 

有没有办法根据不同的颜色选择过滤Thing?另外,有没有办法动态编写它,以便所有颜色选择都可以响应单个视图?

2 个答案:

答案 0 :(得分:3)

您应该查看Q个对象。这可以帮助您构建复杂的OR查询,具体取决于用户选择过滤的颜色。

更新添加示例。

假设您要过滤多种颜色:

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)

答案 1 :(得分:1)

你想要这个吗?

视图

def filter_by_color(request, color):
     q = Thing.objects.filter(color=color)

因此,当您访问http://yoursite/thisview/black时,您将获得黑色Thing,当您访问http://yoursite/thisview/red时,您将获得红色的Thing