所以我试图做的是过滤来自查询的列表并返回可能的选项。
我有三个型号:
class Category(models.Model):
title = models.CharField(max_length=60, unique=True)
class Colors(models.Model):
title = models.CharField(max_length=40, unique=True)
class Post(models.Model):
title = models.CharField(max_length=40)
colors = models.ManyToManyField(Color)
category = models.ForeignKey(Category)
is_active = models.BooleanField(default=True)
现在我要做的是:
我的尝试看起来像这样:
# to be able using multiple values like ?color=red&color=blue&color=yellow
queryparams = dict(request.query_params.lists())
colors_list = []
categories_list = []
if 'color' in query_params:
colors_list = query_params['color']
if 'category' in query_params:
categories_list = query_params['category']
posts = Post.objects.filter(is_active=True)
if colors_list:
for color in colors_list:
posts = posts.filter(colors__title=color)
if categories_list:
for category in categories_list:
posts = posts.filter(category__title=category)
colors_options = posts.order_by('colors__title').values_list('colors__title', flat=True).distinct()
categories_options = posts.order_by('category__title').values_list('category__title', flat=True).distinct()
选项部分目前无法按我的意愿行事。假设我有5个具有以下颜色的对象:
如果我要搜索?color = red& color = white,它应该给我以下选项:
蓝色,红色,白色,黄色但它只返回一种颜色
是否还有更有效和惯用的方法来实现这一目标? 这只是一个片段,实际上有更多的选择,但我试图在这里保持清晰。
答案 0 :(得分:0)
而不是做
if colors_list:
for color in colors_list:
posts = posts.filter(colors__title=color)
尝试:
if colors_list:
posts = posts.filter(colors__title__in=colors_list)
请参阅:CertInstaller