1. from django.db import models
    
  2. 
    
  3. 
    
  4. class Account(models.Model):
    
  5.     num = models.IntegerField()
    
  6. 
    
  7. 
    
  8. class Person(models.Model):
    
  9.     GENDER_CHOICES = (
    
  10.         ("M", "Male"),
    
  11.         ("F", "Female"),
    
  12.     )
    
  13.     name = models.CharField(max_length=20)
    
  14.     gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    
  15.     pid = models.IntegerField(null=True, default=None)
    
  16. 
    
  17. 
    
  18. class Employee(Person):
    
  19.     employee_num = models.IntegerField(default=0)
    
  20.     profile = models.ForeignKey(
    
  21.         "Profile", models.SET_NULL, related_name="profiles", null=True
    
  22.     )
    
  23.     accounts = models.ManyToManyField("Account", related_name="employees", blank=True)
    
  24. 
    
  25. 
    
  26. class NonConcreteField(models.IntegerField):
    
  27.     def db_type(self, connection):
    
  28.         return None
    
  29. 
    
  30.     def get_attname_column(self):
    
  31.         attname, _ = super().get_attname_column()
    
  32.         return attname, None
    
  33. 
    
  34. 
    
  35. class Profile(models.Model):
    
  36.     name = models.CharField(max_length=200)
    
  37.     salary = models.FloatField(default=1000.0)
    
  38.     non_concrete = NonConcreteField()
    
  39. 
    
  40. 
    
  41. class ProxyEmployee(Employee):
    
  42.     class Meta:
    
  43.         proxy = True