Filter list with db model

This commit is contained in:
Eden Kirin
2024-05-14 22:34:21 +02:00
parent 1456ba8538
commit 4c7b18d07b
10 changed files with 193 additions and 114 deletions

View File

@ -1,27 +1,31 @@
from typing import Any, Optional
from project.main.cat_breeds import CatBreed, cat_breeds
from django.db.models import Count, Q
from project.main.models import CatBreed
from project.main.views.demo_view_base import DemoViewBase
def get_countries() -> list[str]:
return sorted(set([c.country for c in cat_breeds if len(c.country)]))
ann = (
CatBreed.objects.values("country")
.annotate(Count("country"))
.order_by("country")
)
return [a["country"] for a in ann]
def filter_cat_breeds(
breed_filter: Optional[str] = None, country_filter: Optional[str] = None
) -> list[CatBreed]:
if not breed_filter and not country_filter:
return cat_breeds
q = Q()
result = []
for breed in cat_breeds:
# if (not breed_filter or breed_filter.lower() in breed.name.lower()) or (
# not country_filter or country_filter == breed.country
# ):
if not breed_filter or breed_filter.lower() in breed.name.lower():
result.append(breed)
return result
if breed_filter:
q &= Q(name__icontains=breed_filter)
if country_filter:
q &= Q(country=country_filter)
return CatBreed.objects.filter(q).order_by("name")
class FilterListView(DemoViewBase):