让我们说我们有一个类Place
与继承的类Restaurant
:
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
如果我有一个与地方相关的课程Tag
:
class Tag(models.Model):
name = models.CharField(max_length=50)
tagged = models.ManyToManyField(Place, related_name="tags")
对于给定的标记,如何让查询集选择所有具有此标记的餐馆,而不是其他类型的地方?
最简单的方法是从filter
调用Restaurant.objects
,例如:
Restaurant.objects.filter(tags=tag)
但是如果你想从filter
调用Place.objects
,你必须在你的父模型中使用一个Django多态性应用程序,例如Django-Polymorphic,因为Django默认情况下不支持模型多态性。
注意:阅读关于OOP Polymorphism和This article的This article,了解有关Django模型继承的一些额外信息。