首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Django Rest框架和Angular 11制作多个数据值的过滤器

如何使用Django Rest框架和Angular 11制作多个数据值的过滤器
EN

Stack Overflow用户
提问于 2021-08-30 06:59:13
回答 1查看 34关注 0票数 0

我在我的项目中遇到了搜索和过滤的问题。我使用Django rest框架和PostgreSQL作为后端,Angular 11作为前端。我的模型类是

代码语言:javascript
运行
复制
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之类的项目选择工具和技术,则结果应该被过滤并显示。用户可以通过工具和技术、域、环境进行过滤。每个字段可以是多个值。我怎么才能解决这个问题呢?提亚

EN

回答 1

Stack Overflow用户

发布于 2021-08-30 07:26:32

这可以像下面这样做。考虑到您将通过GET api params传递要应用的过滤器,在此函数的views.py中,您将以这种方式获取数据

代码语言:javascript
运行
复制
data = request.data.copy()

然后

维护筛选器变量kwargs = {}

保存可能的过滤值,

代码语言:javascript
运行
复制
tools_and_technology = data.get('tools_and_technology',None)
domain = data.get('domain',None)
environment = data.get('environment',None)

现在,对于每个人,

代码语言:javascript
运行
复制
if tools_and_technology:
    kwargs['tools_and_technology'] = tools_and_technology
if domain:
    kwargs['domain'] = domain
if environment:
    kwargs['environment'] = environment

如果支持每个筛选器的值列表,则可以在查询集中添加__in,并确保值在列表中

代码语言:javascript
运行
复制
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)

您可以通过序列化程序返回此查询集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68980056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档