-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathserializers.py
82 lines (61 loc) · 2.44 KB
/
serializers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# -*- coding: utf-8 -*-
from django.contrib.auth.models import User, Group
from django.core.mail import send_mail
from quickstart.models import Comment, Event
from rest_framework import serializers
from rest_framework.validators import UniqueTogetherValidator
def multiple_of_ten(value):
if value % 10 != 0:
raise serializers.ValidationError('Not a multiple of ten')
class BlogPostSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
content = serializers.CharField()
def validate_title(self, value):
"""
Check that the blog post is about Django.
"""
if 'django' not in value.lower():
raise serializers.ValidationError("Blog post is not about Django")
return value
class CommentSerializer(serializers.Serializer):
email = serializers.EmailField()
content = serializers.CharField(max_length=200)
created = serializers.DateTimeField()
class ContactForm(serializers.Serializer):
email = serializers.EmailField()
message = serializers.CharField()
def save(self):
email = self.validated_data['email']
message = self.validated_data['message']
subject = '[Website] A Test'
to_send = '[email protected]'
send_mail(subject, message, email, [to_send])
class EventSerializer(serializers.Serializer):
name = serializers.CharField()
description = serializers.CharField(max_length=100)
room_number = serializers.IntegerField()
start_date = serializers.DateTimeField()
finish_date = serializers.DateTimeField()
class Meta:
# Each room only has one event per day.
validators = UniqueTogetherValidator(
queryset=Event.objects.all(),
fields=['room_number', 'start_date', 'finish_date']
)
def validate(self, data):
"""
Check that the start date is before the stop.
"""
if data['start_date'] > data['finish_date']:
raise serializers.ValidationError("finish date must occur after start date")
return data
class GameRecord(serializers.Serializer):
score = serializers.IntegerField(validators=[multiple_of_ten])
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')