我在我的项目中遇到了搜索和过滤的问题。我使用Django rest框架和PostgreSQL作为后端,Angular 11作为前端。我的模型类是
class Project(models.Model):
title = models.CharField(max_length=200)
domain = models.ManyToManyField(Domain)
environment = models.ManyToManyField(Environment)
tools_and_technology = models.ManyToManyField(ToolsAndTechnology)
user = models.ManyToManyField(User)
photo = models.ImageField(blank=True, null=True,upload_to=uploadPath)
def __str__(self):
return self.title
如果用户为诸如C#或Java之类的项目选择工具和技术,则结果应该被过滤并显示。用户可以通过工具和技术、域、环境进行过滤。每个字段可以是多个值。我怎么才能解决这个问题呢?提亚
发布于 2021-08-30 07:26:32
这可以像下面这样做。考虑到您将通过GET api params传递要应用的过滤器,在此函数的views.py中,您将以这种方式获取数据
data = request.data.copy()
然后
维护筛选器变量kwargs = {}
保存可能的过滤值,
tools_and_technology = data.get('tools_and_technology',None)
domain = data.get('domain',None)
environment = data.get('environment',None)
现在,对于每个人,
if tools_and_technology:
kwargs['tools_and_technology'] = tools_and_technology
if domain:
kwargs['domain'] = domain
if environment:
kwargs['environment'] = environment
如果支持每个筛选器的值列表,则可以在查询集中添加__in
,并确保值在列表中
if tools_and_technology:
kwargs['tools_and_technology__in'] = tools_and_technology
if domain:
kwargs['domain__in'] = domain
if environment:
kwargs['environment__in'] = environment
稍后,在queryset中使用此kwargs
queryset = Project.objects.filter(**kwargs)
您可以通过序列化程序返回此查询集。
https://stackoverflow.com/questions/68980056
复制相似问题