假设你没有在成像器或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