【问题标题】:How to make filter Using multiple data value using Django Rest Framework and Angular 11如何使用 Django Rest Framework 和 Angular 11 使用多个数据值进行过滤
【发布时间】:2021-10-28 23:11:33
【问题描述】:

我在项目中遇到搜索和过滤问题。我使用 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 等项目选择工具和技术,则应过滤并显示结果。用户可以按工具和技术、领域、环境进行过滤。每个字段可以是多个值。我该如何解决这个问题? TIA

【问题讨论】:

    标签: django angular django-rest-framework


    【解决方案1】:

    这可以像下面那样完成。 考虑到您将通过 GET api 参数传递要应用的过滤器, 这个函数在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
    

    稍后,在查询集中使用这个 kwargs

    queryset = Project.objects.filter(**kwargs)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 2021-03-09
      • 2017-05-16
      • 2021-07-12
      • 2020-01-10
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      相关资源
      最近更新 更多