有没有办法访问基本模型的实际孩子,意思是:继续使用 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)
Run Code Online (Sandbox Code Playgroud)
我现在想执行:
Place.objects.get(name="my_place").<GENERIC_CHILD>.deliver()
Run Code Online (Sandbox Code Playgroud)
即我不需要知道这个地方实际上是什么,只需要知道常用的deliver方法。然后模型“知道”该调用什么。
有类似的东西<GENERIC_CHILD>吗?
我总是使用django-model-utils 中的继承管理器来进行此类操作。在您的模型上:
class Place(models.Model):
objects = InheritanceManager() #<- add inheritance manager
name = models.CharField(max_length=10)
def deliver(self):
pass #not needed
Run Code Online (Sandbox Code Playgroud)
您的查询:
Place.objects.get_subclass(name="my_place").deliver()
Run Code Online (Sandbox Code Playgroud)
对我来说,这是一个干净而优雅的解决方案。如果您喜欢,请不要忘记启动django-model-util 存储库。
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |