summaryrefslogtreecommitdiff
path: root/tests/model_inheritance_regress/models.py
diff options
context:
space:
mode:
authorFlorian Apolloner <florian@apolloner.eu>2013-02-26 09:53:47 +0100
committerFlorian Apolloner <florian@apolloner.eu>2013-02-26 14:36:57 +0100
commit89f40e36246100df6a11316c31a76712ebc6c501 (patch)
tree6e65639683ddaf2027908d1ecb1739e0e2ff853b /tests/model_inheritance_regress/models.py
parentb3d2ccb5bfbaf6e7fe1f98843baaa48c35a70950 (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.py184
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)