gault-millau/apps/account/serializers.py
2019-08-07 16:10:23 +03:00

57 lines
1.8 KiB
Python

from fcm_django.models import FCMDevice
from rest_framework import serializers, exceptions
from account import models
class UserSerializer(serializers.ModelSerializer):
"""User serializer."""
class Meta:
model = models.User
fields = [
'first_name',
'last_name',
]
class FCMDeviceSerializer(serializers.ModelSerializer):
"""FCM Device model serializer"""
class Meta:
model = FCMDevice
fields = ('id', 'name', 'registration_id', 'device_id',
'active', 'date_created', 'type')
read_only_fields = ('id', 'date_created',)
extra_kwargs = {'active': {'default': True}}
def validate(self, attrs):
regid = attrs.get('registration_id')
dtype = attrs.get('type')
if regid and dtype and self.Meta.model.objects.filter(
registration_id=regid).exclude(type=dtype).count():
raise exceptions.ValidationError(
{'registration_id': 'This field must be unique.'})
return attrs
def __init__(self, *args, **kwargs):
super(FCMDeviceSerializer, self).__init__(*args, **kwargs)
self.fields['type'].help_text = (
'Should be one of ["%s"]' %
'", "'.join([i for i in self.fields['type'].choices]))
def create(self, validated_data):
user = self.context['request'].user
if not user.is_anonymous:
validated_data['user'] = user
device = FCMDevice.objects.create(**validated_data)
return device
def update(self, instance, validated_data):
user = self.context['request'].user
if not user.is_anonymous:
instance.user = user
instance.save()
else:
instance.user = None
instance.save()
return instance