Comments (1)
Hey, thanks for the nice words!
I'm personally no longer using Django, but we did use it in a Django REST project before.
These are some examples from the Django REST website that I changed to include odata-query
.
I haven't tested them, but they should give you a good starting point:
from odata_query.django import apply_odata_query
from odata_query.exceptions import ODataException
from rest_framework import viewsets
from rest_framework.response import Response
from your_app import BlogPost, BlogPostSerializer
class BlogPostViewSet(viewsets.ViewSet):
"""
A simple ViewSet for listing or retrieving blog posts.
"""
def list(self, request):
queryset = BlogPost.objects.all()
# Apply OData filters, if passed in a query param named `filter`:
if filter := request.query_params.get("filter"):
try:
queryset = apply_odata_query(queryset, filter)
except ODataException as e:
# An invalid query was passed, handle howevere you like.
raise
serializer = BlogPostSerializer(queryset, many=True)
return Response(serializer.data)
It should work in a very similar fashion when using other Django REST features. E.g. when using ModelViewSet
, it would probably look something like this:
class BlogPostViewSet(viewsets.ModelViewSet):
serializer_class = BlogPostSerializer
def get_queryset(self):
queryset = BlogPost.objects.all()
# Apply OData filters, if passed in a query param named `filter`:
if filter := self.request.query_params.get("filter"):
try:
queryset = apply_odata_query(queryset, filter)
except ODataException as e:
# An invalid query was passed, handle howevere you like.
raise
return queryset
If you want to make it more reusable, Django REST also has the FilterBackend
feature. That could look something like this:
class ODataFilterBackend(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
# Apply OData filters, if passed in a query param named `filter`:
if filter := self.request.query_params.get("filter"):
try:
queryset = apply_odata_query(queryset, filter)
except ODataException as e:
# An invalid query was passed, handle howevere you like.
raise
return queryset
class BlogPostViewSet(viewsets.ModelViewSet):
serializer_class = BlogPostSerializer
filter_backends = [ODataFilterBackend]
from odata-query.
Related Issues (20)
- Disambiguate single-item lists from parenthesized expressions.
- Fully type annotate the library HOT 2
- Better support for `ENUM`s HOT 1
- Does the parser support `contains(field, value)` comparisons? HOT 4
- Question about usage. HOT 2
- Outdated docs HOT 2
- Managing more than one entity in `AstToSqlAlchemyClauseVisitor` HOT 3
- Filter not working for uuid column HOT 6
- Remove Athena specific code HOT 3
- Support for SQLAlchemy Core HOT 2
- Support relationship traversal and `any/all` in SQLAlchemy Core
- Implicit Support for SQLAlchemy's Query-API has been removed HOT 5
- Filter on joined relationship not working for legacy Query objects HOT 3
- apply aggregation support HOT 2
- Definition of sqlalchemy functions_ext overrides desired behaviour HOT 2
- `AstToSqlVisitor` can not handle a function call as right hand side of contains-filter HOT 2
- odata geospatial properties HOT 3
- Missing release tags HOT 1
- Integer values are not parsed correctly HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from odata-query.