gault-millau/apps/report/serializers.py

46 lines
1.3 KiB
Python

"""DRF-serializers for application report."""
from django.utils.functional import cached_property
from rest_framework import serializers
from report.models import Report
class ReportBaseSerializer(serializers.ModelSerializer):
"""Serializer for model Report."""
category_display = serializers.CharField(source='get_category_display', read_only=True)
class Meta:
"""Meta class."""
model = Report
fields = [
'id',
'category',
'category_display',
'url',
'description',
'locale',
]
extra_kwargs = {
'source': {'required': False},
'category': {'write_only': True},
'locale': {'write_only': True}
}
@cached_property
def locale(self) -> str:
"""Return locale from request."""
request = self.context.get('request')
if hasattr(request, 'locale'):
return request.locale
def validate(self, attrs):
"""An overridden validate method."""
attrs['source'] = self.context.get('view').get_source()
attrs['locale'] = self.locale
return attrs
def create(self, validated_data):
"""An overridden create method."""
return self.Meta.model.objects.make(**validated_data)