有没有办法访问基本模型的实际 child ,意思是:继续使用 django Docs 中的示例,让我们假设我正在建模不同的外卖餐厅,它们只是有共同点
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
方法。然后模型“知道”该调用什么。有没有类似
<GENERIC_CHILD>
?
最佳答案
我总是用 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如果你喜欢它。
关于Django 模型继承 - 得到 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47619535/