在Django中,我有三种模型:

class Base(models.Model):
    pass

class ChildA(Base):
    pass

class ChildB(Base):
    pass


我正在使用MySQL,因此在syncdb之后,我有三个表:

tb_basetb_childatb_childbtb_childatb_childb的主键也是tb_base主键的外键)。

从结构上讲,我可以让模型BaseChildAChildB的对象具有
 相同的ID。

例如,现在我执行:

childa = ChildA.objects.create()
print(childa.pk) # printed: 1


上面的代码在tb_basetb_childa中添加了一行,两者都用主键id
1。

现在,我想创建一个ChildB实例,但是它共享childa的基础对象。

例如:

# this doesn't work, but shows what I want to do.
childb = ChildB.objects.create(base=Base.objects.get(pk=1))




我的最终目的是在不同情况下使用ChildAChildB模型,但是如果更新了基本零件字段,则他们可以共享它。

另外,我想考虑删除对象时的行为。

最佳答案

我认为这没有多大意义,但您可以这样做:

childb = ChildB.objects.create(base_ptr_id=1))


您可能会考虑定义另一个类,该类保存ChildA和ChildB之间的共享数据。

from django.db import models


class SharedData(models.Model):
    data = models.CharField("Data", max_length=50)


class Base(models.Model):
    shared_data = models.ForeignKey(SharedData)


class ChildA(Base):
    pass


class ChildB(Base):
    pass

关于python - Django中的多个模型对象继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24836377/

10-11 04:28