1

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

模型:

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根据不同的颜色选择进行过滤?此外,有没有办法动态地编写它,以便所有颜色选择都可以响应单个视图?

4

2 回答 2

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)
于 2012-10-30T09:58:10.827 回答
1

你想要这个吗?

看法

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

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

于 2012-10-30T06:47:32.273 回答