Dica 52 - DRF: django-filter

arrow-up-right

Github: https://github.com/rg3915/drf-examplearrow-up-right

Doc: https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackendarrow-up-right

Doc: https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html#integration-with-drfarrow-up-right

Filtrando a queryset

Editar blog/models.py

# blog/models.py
from django.contrib.auth.models import User
from django.db import models


class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30, null=True)

    class Meta:
        verbose_name_plural = "Authors"

    @property
    def full_name(self):
        return f'{self.first_name} {self.last_name or ""}'.strip()

    def __str__(self):
        return self.full_name


class Post(models.Model):
    title = models.CharField(max_length=30)
    body = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE, null=True)
    created_by = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        verbose_name='criado por',
        null=True
    )
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Posts"

    def __str__(self):
        return self.title

Editar blog/admin.py

Editar blog/views.py

Filtrando pelo usuário logado

Editar blog/views.py

Erro:

Editar blog/urls.py

Filtrando a partir de query parameters

Editar settings.py

Editar blog/views.py

Filtro Genérico django-filter

https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html#integration-with-drf

Editar settings.py

Editar blog/views.py

Filtra pelo texto completo.

Adicionando filtro específico com filterset_class

Editar blog/filters.py

Editar blog/views.py

Campo de busca

Editar blog/views.py

Last updated

Was this helpful?