2 A test spanning all the capabilities of all the serializers.
4 This class sets up a model for each model field type
5 (except for image types, because of the PIL dependency).
8 from django
.db
import models
9 from django
.contrib
.contenttypes
import generic
10 from django
.contrib
.contenttypes
.models
import ContentType
12 # The following classes are for testing basic data
13 # marshalling, including NULL values.
15 class BooleanData(models
.Model
):
16 data
= models
.BooleanField(null
=True)
18 class CharData(models
.Model
):
19 data
= models
.CharField(max_length
=30, null
=True)
21 class DateData(models
.Model
):
22 data
= models
.DateField(null
=True)
24 class DateTimeData(models
.Model
):
25 data
= models
.DateTimeField(null
=True)
27 class DecimalData(models
.Model
):
28 data
= models
.DecimalField(null
=True, decimal_places
=3, max_digits
=5)
30 class EmailData(models
.Model
):
31 data
= models
.EmailField(null
=True)
33 class FileData(models
.Model
):
34 data
= models
.FileField(null
=True, upload_to
='/foo/bar')
36 class FilePathData(models
.Model
):
37 data
= models
.FilePathField(null
=True)
39 class FloatData(models
.Model
):
40 data
= models
.FloatField(null
=True)
42 class IntegerData(models
.Model
):
43 data
= models
.IntegerField(null
=True)
45 # class ImageData(models.Model):
46 # data = models.ImageField(null=True)
48 class IPAddressData(models
.Model
):
49 data
= models
.IPAddressField(null
=True)
51 class NullBooleanData(models
.Model
):
52 data
= models
.NullBooleanField(null
=True)
54 class PhoneData(models
.Model
):
55 data
= models
.PhoneNumberField(null
=True)
57 class PositiveIntegerData(models
.Model
):
58 data
= models
.PositiveIntegerField(null
=True)
60 class PositiveSmallIntegerData(models
.Model
):
61 data
= models
.PositiveSmallIntegerField(null
=True)
63 class SlugData(models
.Model
):
64 data
= models
.SlugField(null
=True)
66 class SmallData(models
.Model
):
67 data
= models
.SmallIntegerField(null
=True)
69 class TextData(models
.Model
):
70 data
= models
.TextField(null
=True)
72 class TimeData(models
.Model
):
73 data
= models
.TimeField(null
=True)
75 class USStateData(models
.Model
):
76 data
= models
.USStateField(null
=True)
78 class XMLData(models
.Model
):
79 data
= models
.XMLField(null
=True)
81 class Tag(models
.Model
):
82 """A tag on an item."""
83 data
= models
.SlugField()
84 content_type
= models
.ForeignKey(ContentType
)
85 object_id
= models
.PositiveIntegerField()
87 content_object
= generic
.GenericForeignKey()
92 class GenericData(models
.Model
):
93 data
= models
.CharField(max_length
=30)
95 tags
= generic
.GenericRelation(Tag
)
97 # The following test classes are all for validation
98 # of related objects; in particular, forward, backward,
99 # and self references.
101 class Anchor(models
.Model
):
102 """This is a model that can be used as
103 something for other models to point at"""
105 data
= models
.CharField(max_length
=30)
107 class UniqueAnchor(models
.Model
):
108 """This is a model that can be used as
109 something for other models to point at"""
111 data
= models
.CharField(unique
=True, max_length
=30)
113 class FKData(models
.Model
):
114 data
= models
.ForeignKey(Anchor
, null
=True)
116 class M2MData(models
.Model
):
117 data
= models
.ManyToManyField(Anchor
, null
=True)
119 class O2OData(models
.Model
):
120 # One to one field can't be null here, since it is a PK.
121 data
= models
.OneToOneField(Anchor
, primary_key
=True)
123 class FKSelfData(models
.Model
):
124 data
= models
.ForeignKey('self', null
=True)
126 class M2MSelfData(models
.Model
):
127 data
= models
.ManyToManyField('self', null
=True, symmetrical
=False)
129 class FKDataToField(models
.Model
):
130 data
= models
.ForeignKey(UniqueAnchor
, null
=True, to_field
='data')
132 class FKDataToO2O(models
.Model
):
133 data
= models
.ForeignKey(O2OData
, null
=True)
135 # The following test classes are for validating the
136 # deserialization of objects that use a user-defined
137 # field as the primary key.
138 # Some of these data types have been commented out
139 # because they can't be used as a primary key on one
140 # or all database backends.
142 class BooleanPKData(models
.Model
):
143 data
= models
.BooleanField(primary_key
=True)
145 class CharPKData(models
.Model
):
146 data
= models
.CharField(max_length
=30, primary_key
=True)
148 # class DatePKData(models.Model):
149 # data = models.DateField(primary_key=True)
151 # class DateTimePKData(models.Model):
152 # data = models.DateTimeField(primary_key=True)
154 class DecimalPKData(models
.Model
):
155 data
= models
.DecimalField(primary_key
=True, decimal_places
=3, max_digits
=5)
157 class EmailPKData(models
.Model
):
158 data
= models
.EmailField(primary_key
=True)
160 class FilePKData(models
.Model
):
161 data
= models
.FileField(primary_key
=True, upload_to
='/foo/bar')
163 class FilePathPKData(models
.Model
):
164 data
= models
.FilePathField(primary_key
=True)
166 class FloatPKData(models
.Model
):
167 data
= models
.FloatField(primary_key
=True)
169 class IntegerPKData(models
.Model
):
170 data
= models
.IntegerField(primary_key
=True)
172 # class ImagePKData(models.Model):
173 # data = models.ImageField(primary_key=True)
175 class IPAddressPKData(models
.Model
):
176 data
= models
.IPAddressField(primary_key
=True)
178 # This is just a Boolean field with null=True, and we can't test a PK value of NULL.
179 # class NullBooleanPKData(models.Model):
180 # data = models.NullBooleanField(primary_key=True)
182 class PhonePKData(models
.Model
):
183 data
= models
.PhoneNumberField(primary_key
=True)
185 class PositiveIntegerPKData(models
.Model
):
186 data
= models
.PositiveIntegerField(primary_key
=True)
188 class PositiveSmallIntegerPKData(models
.Model
):
189 data
= models
.PositiveSmallIntegerField(primary_key
=True)
191 class SlugPKData(models
.Model
):
192 data
= models
.SlugField(primary_key
=True)
194 class SmallPKData(models
.Model
):
195 data
= models
.SmallIntegerField(primary_key
=True)
197 # class TextPKData(models.Model):
198 # data = models.TextField(primary_key=True)
200 # class TimePKData(models.Model):
201 # data = models.TimeField(primary_key=True)
203 class USStatePKData(models
.Model
):
204 data
= models
.USStateField(primary_key
=True)
206 # class XMLPKData(models.Model):
207 # data = models.XMLField(primary_key=True)
209 class ComplexModel(models
.Model
):
210 field1
= models
.CharField(max_length
=10)
211 field2
= models
.CharField(max_length
=10)
212 field3
= models
.CharField(max_length
=10)
214 # Tests for handling fields with pre_save functions, or
215 # models with save functions that modify data
216 class AutoNowDateTimeData(models
.Model
):
217 data
= models
.DateTimeField(null
=True, auto_now
=True)
219 class ModifyingSaveData(models
.Model
):
220 data
= models
.IntegerField(null
=True)
223 "A save method that modifies the data in the object"
225 super(ModifyingSaveData
, self
).save(raw
)