Предполагая, что у вас нет дополнительных полей на Imager или ImagerB, тогда вы можете использовать proxy models.
Это позволяет сохранить одну таблицу db для базового класса и предоставить Imager и ImagerB общий доступ к данным - она действительно работает как соответствующее Object Orientated Inheritance. Проблема в том, что у вас не может быть дополнительных полей для дочерних классов. Однако, если у вас есть немного гибкости, вы можете сделать поля необязательными в базовом классе, а затем потребовать или скрыть их на дочерних элементах.
UPDATE
Я до сих пор не удалось получить следующий код для работы, однако она может обеспечить некоторые идеи.
class TheImage(models.Model):
create_time = models.DateTimeField()
field2 = models.CharField(max_length=64, blank=True, null=True)
field3 = models.TextField(blank=True, null=True)
class Imager(TheImage):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
for f in self._meta.fields:
if f.name == 'field2':
f.editable = False
if f.name == 'field3':
f.blank = False:
super(Imager, self).__init__(*args, **kwargs)
class ImagerB(TheImage):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
for f in self._meta.fields:
if f.name == 'field3':
f.editable = False
if f.name == 'field2':
f.blank = False:
super(ImagerB, self).__init__(*args, **kwargs)
Итак, какова точка подклассификации Imager? Я хотел придерживаться DRY путем подклассификации и подклассификации снова, чтобы сделать ImagerB более специализированной версией Imager. Теперь я должен повторить целую кучу вещей, которые были в Imager снова в ImagerB, если я пойду с ImagerB (The_Image_Abstract) – Seperman
Вы все еще можете это сделать, django предоставит вам объекты ImagerB, которые имеют поля из «Imager», но внутренне он создаст разные таблицы. Надеюсь, вы прочитали этот https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance – Rohan
. Моя проблема, как вы сказали, заключается в том, что поля, определенные в Imager, отображаются в ImagerB, но поля, которые были в абстрактном базовом классе, которые были основой Imager, не отображаются в ImagerB. ImagerB бесполезен для меня без них. В основном ImagerB должен быть более специализированной версией Imager. – Seperman