Во-первых, при таком использовании наследования (по крайней мере, согласно моим тестам) невозможно изменить значение по умолчанию для поля в дочернем классе. MathQuestion
и Question
имеют здесь одно и то же поле, изменение значения по умолчанию в дочернем классе влияет на поле в родительском классе.
Теперь, если между MathQuestion
и Question
отличается только поведение (то есть, MathQuestion
не добавляет никаких полей, кроме тех, которые определены в Question
), вы можете сделать его прокси модель . Таким образом, таблица базы данных не создается для MathQuestion
.
from django.db import models
class Question(models.Model):
ques_type = models.SmallIntegerField(default=2)
class MathQuestion(Question):
def __init__(self, *args, **kwargs):
self._meta.get_field('ques_type').default = 3
super(MathQuestion, self).__init__(*args, **kwargs)
class Meta:
proxy = True
Тест:
In [1]: from bar.models import *
In [2]: a=Question.objects.create()
In [3]: a.ques_type
Out[3]: 2
In [4]: b=MathQuestion.objects.create()
In [5]: b.ques_type
Out[5]: 3