Как сделать фильтр по нескольким значениям данных с помощью Django Rest Framework и Angular 11

Я столкнулся с проблемой поиска и фильтрации в своем проекте. Я использую Django rest framework и PostgreSQL для backend и Angular 11 для frontend. мой класс модели

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

это можно сделать следующим образом. учитывая, что вы будете передавать фильтр для применения через параметры GET api, внутри views.py для этой функции, вы получите данные таким образом

data = request.data.copy()

then

поддерживайте переменную фильтра, 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)

вы можете вернуть этот набор запросов через сериализатор.

Вернуться на верх