diff options
| author | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 09:53:47 +0100 |
|---|---|---|
| committer | Florian Apolloner <florian@apolloner.eu> | 2013-02-26 14:36:57 +0100 |
| commit | 89f40e36246100df6a11316c31a76712ebc6c501 (patch) | |
| tree | 6e65639683ddaf2027908d1ecb1739e0e2ff853b /tests/model_inheritance_regress/models.py | |
| parent | b3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (diff) | |
Merged regressiontests and modeltests into the test root.
Diffstat (limited to 'tests/model_inheritance_regress/models.py')
| -rw-r--r-- | tests/model_inheritance_regress/models.py | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/tests/model_inheritance_regress/models.py b/tests/model_inheritance_regress/models.py new file mode 100644 index 0000000000..811c8175bb --- /dev/null +++ b/tests/model_inheritance_regress/models.py @@ -0,0 +1,184 @@ +from __future__ import unicode_literals + +import datetime + +from django.db import models +from django.utils.encoding import python_2_unicode_compatible + +@python_2_unicode_compatible +class Place(models.Model): + name = models.CharField(max_length=50) + address = models.CharField(max_length=80) + + class Meta: + ordering = ('name',) + + def __str__(self): + return "%s the place" % self.name + +@python_2_unicode_compatible +class Restaurant(Place): + serves_hot_dogs = models.BooleanField() + serves_pizza = models.BooleanField() + + def __str__(self): + return "%s the restaurant" % self.name + +@python_2_unicode_compatible +class ItalianRestaurant(Restaurant): + serves_gnocchi = models.BooleanField() + + def __str__(self): + return "%s the italian restaurant" % self.name + +@python_2_unicode_compatible +class ParkingLot(Place): + # An explicit link to the parent (we can control the attribute name). + parent = models.OneToOneField(Place, primary_key=True, parent_link=True) + capacity = models.IntegerField() + + def __str__(self): + return "%s the parking lot" % self.name + +class ParkingLot2(Place): + # In lieu of any other connector, an existing OneToOneField will be + # promoted to the primary key. + parent = models.OneToOneField(Place) + +class ParkingLot3(Place): + # The parent_link connector need not be the pk on the model. + primary_key = models.AutoField(primary_key=True) + parent = models.OneToOneField(Place, parent_link=True) + +class Supplier(models.Model): + restaurant = models.ForeignKey(Restaurant) + +class Wholesaler(Supplier): + retailer = models.ForeignKey(Supplier,related_name='wholesale_supplier') + +class Parent(models.Model): + created = models.DateTimeField(default=datetime.datetime.now) + +class Child(Parent): + name = models.CharField(max_length=10) + +class SelfRefParent(models.Model): + parent_data = models.IntegerField() + self_data = models.ForeignKey('self', null=True) + +class SelfRefChild(SelfRefParent): + child_data = models.IntegerField() + +@python_2_unicode_compatible +class Article(models.Model): + headline = models.CharField(max_length=100) + pub_date = models.DateTimeField() + class Meta: + ordering = ('-pub_date', 'headline') + + def __str__(self): + return self.headline + +class ArticleWithAuthor(Article): + author = models.CharField(max_length=100) + +class M2MBase(models.Model): + articles = models.ManyToManyField(Article) + +class M2MChild(M2MBase): + name = models.CharField(max_length=50) + +class Evaluation(Article): + quality = models.IntegerField() + + class Meta: + abstract = True + +class QualityControl(Evaluation): + assignee = models.CharField(max_length=50) + +@python_2_unicode_compatible +class BaseM(models.Model): + base_name = models.CharField(max_length=100) + + def __str__(self): + return self.base_name + +@python_2_unicode_compatible +class DerivedM(BaseM): + customPK = models.IntegerField(primary_key=True) + derived_name = models.CharField(max_length=100) + + def __str__(self): + return "PK = %d, base_name = %s, derived_name = %s" \ + % (self.customPK, self.base_name, self.derived_name) + +class AuditBase(models.Model): + planned_date = models.DateField() + + class Meta: + abstract = True + verbose_name_plural = 'Audits' + +class CertificationAudit(AuditBase): + class Meta(AuditBase.Meta): + abstract = True + +class InternalCertificationAudit(CertificationAudit): + auditing_dept = models.CharField(max_length=20) + +# Check that abstract classes don't get m2m tables autocreated. +@python_2_unicode_compatible +class Person(models.Model): + name = models.CharField(max_length=100) + + class Meta: + ordering = ('name',) + + def __str__(self): + return self.name + +@python_2_unicode_compatible +class AbstractEvent(models.Model): + name = models.CharField(max_length=100) + attendees = models.ManyToManyField(Person, related_name="%(class)s_set") + + class Meta: + abstract = True + ordering = ('name',) + + def __str__(self): + return self.name + +class BirthdayParty(AbstractEvent): + pass + +class BachelorParty(AbstractEvent): + pass + +class MessyBachelorParty(BachelorParty): + pass + +# Check concrete -> abstract -> concrete inheritance +class SearchableLocation(models.Model): + keywords = models.CharField(max_length=256) + +class Station(SearchableLocation): + name = models.CharField(max_length=128) + + class Meta: + abstract = True + +class BusStation(Station): + bus_routes = models.CommaSeparatedIntegerField(max_length=128) + inbound = models.BooleanField() + +class TrainStation(Station): + zone = models.IntegerField() + +class User(models.Model): + username = models.CharField(max_length=30, unique=True) + +class Profile(User): + profile_id = models.AutoField(primary_key=True) + extra = models.CharField(max_length=30, blank=True) |
