another nontree hierarchy that exercises code paths similar to the above example but in a slightly different configuration models for testing bug 8036 some model inheritance exercises models for testing bug 19870 another non tree hierarchy that exercises code paths similar to the above example but in a slightly different configuration models for testing bug 8036 some model inheritance exercises models for testing bug 19870
from django.db import models


class Building(models.Model):
    name = models.CharField(max_length=10)


class Device(models.Model):
    building = models.ForeignKey("Building", models.CASCADE)
    name = models.CharField(max_length=10)


class Port(models.Model):
    device = models.ForeignKey("Device", models.CASCADE)
    port_number = models.CharField(max_length=10)

    def __str__(self):
        return "%s/%s" % (self.device.name, self.port_number)


class Connection(models.Model):
    start = models.ForeignKey(
        Port,
        models.CASCADE,
        related_name="connection_start",
        unique=True,
    )
    end = models.ForeignKey(
        Port,
        models.CASCADE,
        related_name="connection_end",
        unique=True,
    )






class TUser(models.Model):
    name = models.CharField(max_length=200)


class Person(models.Model):
    user = models.ForeignKey(TUser, models.CASCADE, unique=True)


class Organizer(models.Model):
    person = models.ForeignKey(Person, models.CASCADE)


class Student(models.Model):
    person = models.ForeignKey(Person, models.CASCADE)


class Class(models.Model):
    org = models.ForeignKey(Organizer, models.CASCADE)


class Enrollment(models.Model):
    std = models.ForeignKey(Student, models.CASCADE)
    cls = models.ForeignKey(Class, models.CASCADE)





class Country(models.Model):
    name = models.CharField(max_length=50)


class State(models.Model):
    name = models.CharField(max_length=50)
    country = models.ForeignKey(Country, models.CASCADE)


class ClientStatus(models.Model):
    name = models.CharField(max_length=50)


class Client(models.Model):
    name = models.CharField(max_length=50)
    state = models.ForeignKey(State, models.SET_NULL, null=True)
    status = models.ForeignKey(ClientStatus, models.CASCADE)


class SpecialClient(Client):
    value = models.IntegerField()





class Parent(models.Model):
    name = models.CharField(max_length=10)


class Child(Parent):
    value = models.IntegerField()


class Item(models.Model):
    name = models.CharField(max_length=10)
    child = models.ForeignKey(Child, models.SET_NULL, null=True)

    def __str__(self):
        return self.name





class Fowl(models.Model):
    name = models.CharField(max_length=10)


class Hen(Fowl):
    pass


class Chick(Fowl):
    mother = models.ForeignKey(Hen, models.CASCADE)


class Base(models.Model):
    name = models.CharField(max_length=10)
    lots_of_text = models.TextField()

    class Meta:
        abstract = True


class A(Base):
    a_field = models.CharField(max_length=10)


class B(Base):
    b_field = models.CharField(max_length=10)


class C(Base):
    c_a = models.ForeignKey(A, models.CASCADE)
    c_b = models.ForeignKey(B, models.CASCADE)
    is_published = models.BooleanField(default=False)