Metadata-Version: 2.4
Name: drf-ordering-mapper
Version: 0.0.1
Summary: A Django REST Framework filter to map ordering query parameters to ORM fields
Author: Punyak Goswami
Project-URL: Homepage, https://github.com/punyak-goswami/drf-ordering-mapper
Project-URL: Repository, https://github.com/punyak-goswami/drf-ordering-mapper
Keywords: django,djangorestframework,drf,ordering,filter,api
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3
Classifier: Framework :: Django :: 4
Classifier: Framework :: Django :: 5
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# drf-ordering-mapper

Small utility for Django REST Framework to map ordering query params to actual ORM fields.

## Why?

DRF’s `OrderingFilter` works well, but you often end up exposing internal field paths like:

```
?ordering=company__commodity_name
```

That’s not great for API consumers.

This package lets you do:

```
?ordering=commodity_name
```

and map it internally.

---

## Installation

```
pip install drf-ordering-mapper
```

---

## Usage

```python
from drf_ordering_mapper.filters import OrderingMapperFilter

class ProductViewSet(ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    filter_backends = [OrderingMapperFilter]

    ordering_fields = ['commodity_name', 'price']

    ordering_params_mapping = {
        'commodity_name': 'company__commodity_name'
    }
```

---

## Example

Request:

```
GET /api/products?ordering=commodity_name
```

Internally becomes:

```python
queryset.order_by('company__commodity_name')
```

---

Descending:

```
GET /api/products?ordering=-commodity_name
```

---

Multiple fields:

```
GET /api/products?ordering=commodity_name,-price
```

---

## Notes

* Works as a drop-in replacement for DRF’s `OrderingFilter`
* Respects `ordering_fields`
* Ignores invalid fields (same behavior as DRF)
