Skip to content

Instantly share code, notes, and snippets.

@oscarfonts
Forked from yellowcap/serializers.py
Last active August 29, 2015 14:11
Show Gist options
  • Save oscarfonts/ba4bb4ab4cf13b1bb849 to your computer and use it in GitHub Desktop.
Save oscarfonts/ba4bb4ab4cf13b1bb849 to your computer and use it in GitHub Desktop.
Django-parler and Django REST Framework integration
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
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