diff options
Diffstat (limited to 'parts/django/tests/modeltests/serializers/models.py')
-rw-r--r-- | parts/django/tests/modeltests/serializers/models.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/parts/django/tests/modeltests/serializers/models.py b/parts/django/tests/modeltests/serializers/models.py new file mode 100644 index 0000000..c12e73f --- /dev/null +++ b/parts/django/tests/modeltests/serializers/models.py @@ -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()) |