可以说我们有一个类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")
对于给定的标签,我如何获取一个查询集,选择所有具有此标签的餐厅,而不选择其他类型的地方?
答案 0 :(得分:1)
最简单的方法是从filter
调用Restaurant.objects
,例如:
Restaurant.objects.filter(tags=tag)
但是,如果您想从filter
调用Place.objects
,则必须在父模型中使用诸如Django-Polymorphic之类的Django多态应用之一,因为Django默认不支持模型多态。
注意:请阅读This article有关OOP多态性的知识和This article,以获取有关Django模型继承的一些其他信息。