diff --git a/README.md b/README.md index a86b01d..f9330bc 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,11 @@ path("api/", include([ ])), ``` +### Handling Model-less Querysets +Worf now supports handling custom querysets without relying on a model. If you need to provide your own queryset or response without using a model, you can set the model attribute to None or False. The AnnotatedModelFilterSet and generate_filterset function have been updated to handle these cases properly. + +To use this feature, you should make sure your view class returns a queryset by overriding the get_queryset() method or returning a response via the get() method. + Serializers ----------- diff --git a/worf/filters.py b/worf/filters.py index d8f40b4..b305e16 100644 --- a/worf/filters.py +++ b/worf/filters.py @@ -9,6 +9,9 @@ class AnnotatedModelFilterSet(ModelFilterSet): def get_filters(self): + if self.Meta.model is None or self.Meta.model is False: + return {} + filters = super().get_filters() if self.queryset is not None: @@ -44,6 +47,13 @@ def _build_annotation_filter(self, name, state): def generate_filterset(model, queryset): + if model is None or model is False: + return type( + f"EmptyFilterSet", + (AnnotatedModelFilterSet,), + dict(Meta=type("Meta", (), dict(model=None, queryset=queryset))), + ) + return type( f"{model.__name__}FilterSet", (AnnotatedModelFilterSet,),