parts/django/tests/modeltests/serializers/models.py
changeset 307 c6bca38c1cbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/parts/django/tests/modeltests/serializers/models.py	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+"""
+42. Serialization
+
+``django.core.serializers`` provides interfaces to converting Django
+``QuerySet`` objects to and from "flat" data (i.e. strings).
+"""
+
+from decimal import Decimal
+from django.db import models
+
+class Category(models.Model):
+    name = models.CharField(max_length=20)
+
+    class Meta:
+       ordering = ('name',)
+
+    def __unicode__(self):
+        return self.name
+
+
+class Author(models.Model):
+    name = models.CharField(max_length=20)
+
+    class Meta:
+        ordering = ('name',)
+
+    def __unicode__(self):
+        return self.name
+
+
+class Article(models.Model):
+    author = models.ForeignKey(Author)
+    headline = models.CharField(max_length=50)
+    pub_date = models.DateTimeField()
+    categories = models.ManyToManyField(Category)
+
+    class Meta:
+       ordering = ('pub_date',)
+
+    def __unicode__(self):
+        return self.headline
+
+
+class AuthorProfile(models.Model):
+    author = models.OneToOneField(Author, primary_key=True)
+    date_of_birth = models.DateField()
+
+    def __unicode__(self):
+        return u"Profile of %s" % self.author
+
+
+class Actor(models.Model):
+    name = models.CharField(max_length=20, primary_key=True)
+
+    class Meta:
+        ordering = ('name',)
+
+    def __unicode__(self):
+        return self.name
+
+
+class Movie(models.Model):
+    actor = models.ForeignKey(Actor)
+    title = models.CharField(max_length=50)
+    price = models.DecimalField(max_digits=6, decimal_places=2, default=Decimal('0.00'))
+
+    class Meta:
+       ordering = ('title',)
+
+    def __unicode__(self):
+        return self.title
+
+
+class Score(models.Model):
+    score = models.FloatField()
+
+
+class Team(object):
+    def __init__(self, title):
+        self.title = title
+
+    def __unicode__(self):
+        raise NotImplementedError("Not so simple")
+
+    def __str__(self):
+        raise NotImplementedError("Not so simple")
+
+    def to_string(self):
+        return "%s" % self.title
+
+
+class TeamField(models.CharField):
+    __metaclass__ = models.SubfieldBase
+
+    def __init__(self):
+        super(TeamField, self).__init__(max_length=100)
+
+    def get_db_prep_save(self, value):
+        return unicode(value.title)
+
+    def to_python(self, value):
+        if isinstance(value, Team):
+            return value
+        return Team(value)
+
+    def value_to_string(self, obj):
+        return self._get_val_from_obj(obj).to_string()
+
+
+class Player(models.Model):
+    name = models.CharField(max_length=50)
+    rank = models.IntegerField()
+    team = TeamField()
+
+    def __unicode__(self):
+        return u'%s (%d) playing for %s' % (self.name, self.rank, self.team.to_string())