有没有办法访问基本模型的实际子项,意味着:继续使用django文档中的示例,让我们假设我正在为不同的交付餐厅建模,这只是共同的
deliver
方法截至:
class Place(models.Model):
name = models.CharField(max_length=10)
class Pizzeria(Place):
topping = models.CharField(max_length=10)
tip = models.IntegerField()
def deliver(self):
deliver_with_topping(self.topping)
ask_for_tip(self.tip)
class Shoarma(Place):
sauce = models.CharField(max_length=10)
meat = models.CharField(max_lenght=10)
def deliver(self):
prepare_sauce_with_meat(self.sauce, self.meat)
我现在想执行:
Place.objects.get(name="my_place").<GENERIC_CHILD>.deliver()
即。我不需要知道这个地方到底是什么,只需要常见的deliver
方法。然后该模型知道&#39;该怎么称呼。
有类似<GENERIC_CHILD>
的内容吗?
答案 0 :(得分:1)
我总是使用Inheritance Manager from django-model-utils进行此类操作。在你的模特上:
class Place(models.Model):
objects = InheritanceManager() #<- add inheritance manager
name = models.CharField(max_length=10)
def deliver(self):
pass #not needed
您的查询:
Place.objects.get_subclass(name="my_place").deliver()
对我而言,这是一个干净而优雅的解决方案。如果你愿意,别忘了加注django-model-util repo。
答案 1 :(得分:0)
我搞得一团糟。
我确实有家长班活动,有孩子-行动,交易,订单班。
我想将它们全部列出在1个地方,1)带有一个指定其类的字段,2)将它们链接到同一页面,在此我将根据Activity类渲染页面
因此在我的模型活动中,我添加:
def get_type(self):
children = ['action', 'deal', 'order']
for c in children:
try:
_ = self.__getattribute__(c) # returns child model
except ObjectDoesNotExist:
pass
else:
return c
else:
return 'Not specified'