from django.db import models class Account(models.Model): num = models.IntegerField() class Person(models.Model): GENDER_CHOICES = ( ('M', 'Male'), ('F', 'Female'), ) name = models.CharField(max_length=20) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) pid = models.IntegerField(null=True, default=None) class Employee(Person): employee_num = models.IntegerField(default=0) profile = models.ForeignKey('Profile', models.SET_NULL, related_name='profiles', null=True) accounts = models.ManyToManyField('Account', related_name='employees', blank=True) class NonConcreteField(models.IntegerField): def db_type(self, connection): return None def get_attname_column(self): attname, _ = super().get_attname_column() return attname, None class Profile(models.Model): name = models.CharField(max_length=200) salary = models.FloatField(default=1000.0) non_concrete = NonConcreteField() class ProxyEmployee(Employee): class Meta: proxy = True