假設你沒有在成像器或ImagerB任何附加字段,那麼你可以使用proxy models。
這可以讓你保留一個數據庫表的基類和具有成像儀和ImagerB共享數據 - 它真的就像適當的面向對象的繼承。問題是你不能在子類上有額外的字段。但是,如果你有一點靈活性,那麼你可以使這些字段的基類,然後要求或隱藏他們的孩子選購。
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)
那麼,什麼是子類熱像儀的地步呢?我想堅持的子類和子類再晾乾,使ImagerB成像儀的更爲特殊的版本。現在我不得不在ImagerB中再次使用ImagerB中的一些東西,如果我使用ImagerB(The_Image_Abstract) – Seperman 2013-02-12 06:13:00
您仍然可以這樣做,django會爲您提供'ImagerB'對象,其中包含來自'Imager'的字段,但內部它會創建不同的表格。希望您已閱讀此https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance – Rohan 2013-02-12 08:08:50
我所說的問題是在Imager中定義的字段顯示在ImagerB中,但是在ImagerB中沒有顯示Imager基礎的抽象基類中的字段。沒有這些,ImagerB對我來說毫無用處。基本上ImagerB應該是更專業的Imager版本。 – Seperman 2013-02-12 18:07:50