在Django中,我有三种模型:
class Base(models.Model):
pass
class ChildA(Base):
pass
class ChildB(Base):
pass
我正在使用MySQL,因此在
syncdb
之后,我有三个表:tb_base
,tb_childa
和tb_childb
(tb_childa
和tb_childb
的主键也是tb_base
主键的外键)。从结构上讲,我可以让模型
Base
,ChildA
和ChildB
的对象具有相同的ID。
例如,现在我执行:
childa = ChildA.objects.create()
print(childa.pk) # printed: 1
上面的代码在
tb_base
和tb_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))
我的最终目的是在不同情况下使用
ChildA
和ChildB
模型,但是如果更新了基本零件字段,则他们可以共享它。另外,我想考虑删除对象时的行为。
最佳答案
我认为这没有多大意义,但您可以这样做:
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/