我正在尝试构建一个项目,并且看来满足我的要求使用模型继承可以达到最佳效果,我有一个基本模型,其中有多个模型可以将其用于继承。在基本模型中,我有一个slug字段,该字段在所有字段中都是唯一的(出于完整性考虑)
在我的子模型中,有时我想创建一条记录,但是如果已经有一个父项,我只想创建子项并直接链接到父项。例如,
class Base(models.Model):
slug = models.SlugField(_('Slug'), unique=True)
#Other fiels
class ChildA(Base):
height = models.CharField(max_length=100, )
class ChildB(Base):
is_for_sale = models.BooleanField(_('Is active'), default=True, )
# when creating ChildA, it will automtically insert into base model as well
ChildA.objects.create(slug='bmw', height='11')
# now for childB, I want the newly created object to link to an existing record in Base where slug
# is the unique value, is it possible todo such a thing?
ChildB.objects.create(slug='bmw', is_for_sale=True)
我认为您现在可能对继承有误解。
如果我做对了,您会说应该是唯一的。因此,您将具有一定限制的类的数量限制为“ 1”
您的ClassChildB
和ChildA
不是“链接”到BaseClass
BaseClass的后代,而是BaseClass的后代,因此,子实例也是的实例BaseClass
。
在我看来,您似乎正在寻找一个Slug对象与其他多个具有不同属性的对象之间的关系。
与其尝试从Class Base派生,不如建议这样的关系:
class ChildA(models.Model):
height = models.CharField(max_length=100, )
slug = ForeignKey(Base)
这将确保将使用正确的Slug对象,并且不会再次创建它。
如果您需要保留该继承行,请保留您的基类,但将slug字段提取到其自己的类中,例如
class Slug(models.Model):
slug = models.SlugField(_('Slug'), unique=True)
class Base(models.Model):
# all your other fields
slug = ForeignKey(Slug)
class ChildA(Base):
height = models.CharField(max_length=100, )
class ChildB(Base):
is_for_sale = models.BooleanField(_('Is active'), default=True, )
来到这里后,您可以使用这些类的构造函数对Slug实施进一步的限制(如果尚未提供的话)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句