【发布时间】:2016-05-26 07:51:24
【问题描述】:
我实际上是在尝试提出自己的继承方案,因为 Django 的继承不符合我的需要。
我希望父表(类)包含通用数据字段。
子类将在单独的表中拥有自己的附加数据。
class ProductBase(models.Model):
common = models.IntegerField()
def get_price(self):
return some_price
class FooProduct(ProductBase):
# no field because I'm proxy
class Meta:
proxy = True
def get_price(self):
return price_using_different_logic
class FooExtra(models.Model):
base = models.OneToOneField(ProductBase, primary_key=True)
phone = models.CharField(max_length=10)
我的问题是,是否可以将 Foo 视为拥有 FooExtra 的字段?
我想做一些事情,比如关注..
foo = FooProduct.objects.create()
foo.phone = "3333" # as django does with its multiple inheritance
foo.save()
FooProduct.objects.filter(phone="3333")
我想列出不同种类的产品(数据)
我需要把它们一起列出来,所以抽象的Base继承就出来了
从列表中,我想将每个模型视为多态模型,在迭代 ProductBase.objects.all() 时,product.get_price() 将使用适当的类方法。 (如果不需要,则无需加入)
当且仅当我需要时,我才检索额外的表数据(通过类似
.select_related('fooextra')
Django-polymorphic 接近我想要的,但它的作用相当模糊,所以我不敢使用它,我认为它失败了#3。
【问题讨论】:
-
Django 的默认模型继承对你不起作用的原因是什么?
-
@Ben:我已经编辑了问题来解决这个问题。
标签: python django django-inheritance