-
-
Save oscarfonts/ba4bb4ab4cf13b1bb849 to your computer and use it in GitHub Desktop.
Django-parler and Django REST Framework integration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ParlerModelSerializer(serializers.ModelSerializer): | |
"""https://gist.github.com/yellowcap/81c6d5f3ea1426689c80""" | |
def __init__(self, *args, **kwargs): | |
# Get list of translated fields | |
fields = self.Meta.model._parler_meta._fields_to_model | |
# Separate parler fields and scilent fields | |
parler_fieds = [x for x in self.Meta.fields if x in fields] | |
pas_parler_fields = [x for x in self.Meta.fields if x not in fields] | |
# Remove parler fields from default serializer instantiation | |
self.Meta.fields = pas_parler_fields | |
# Instantiate default serializer without transtlated fields | |
super(ParlerModelSerializer, self).__init__(*args, **kwargs) | |
# Add requested serializer fields | |
for field in parler_fieds: | |
self.fields[field] = serializers.Field(source=field) | |
# Restore original meta fields | |
self.Meta.fields += parler_fieds |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from rest_framework import serializers, viewsets | |
class ParlerModelViewSet(viewsets.ModelViewSet): | |
"""View set that pre-filters to a django-parler language""" | |
def get_queryset(self): | |
# Get default queryset | |
queryset = super(viewsets.ModelViewSet, self).get_queryset() | |
# Get language from query parameters | |
language = self.request.QUERY_PARAMS.get('language', None) | |
# Update language of queryset accordingly | |
if language is not None: | |
queryset = queryset.language(language) | |
return queryset |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment