Nessuna descrizione

filters.py 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from __future__ import annotations
  2. import django_filters as filters
  3. from crispy_forms.helper import FormHelper
  4. from crispy_forms.layout import Layout, Field
  5. from .models import Post, PostCategory
  6. class PostFilter(filters.FilterSet):
  7. title = filters.CharFilter(field_name="title", lookup_expr="icontains", label="Title")
  8. category = filters.ModelChoiceFilter(
  9. field_name="category",
  10. queryset=PostCategory.objects.all(),
  11. label="Category",
  12. )
  13. status = filters.ChoiceFilter(field_name="status", choices=Post.STATUS_CHOICES, label="Status")
  14. published_at = filters.DateTimeFromToRangeFilter(
  15. field_name="published_at",
  16. label="Published between",
  17. widget=filters.widgets.RangeWidget(
  18. attrs={
  19. "type": "datetime-local",
  20. "style": "color-scheme: light;",
  21. "class": "border border-gray-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
  22. }
  23. ),
  24. )
  25. class Meta:
  26. model = Post
  27. fields = ["title", "category", "status", "published_at"]
  28. def __init__(self, *args, **kwargs):
  29. super().__init__(*args, **kwargs)
  30. helper = FormHelper()
  31. helper.form_tag = False
  32. helper.layout = Layout(
  33. Field("title"),
  34. Field("category"),
  35. Field("status"),
  36. Field("published_at"),
  37. )
  38. self.form.helper = helper