按子类类型过滤

问题描述 投票:2回答:1

让我们说我们有一个类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")

对于给定的标记,如何让查询集选择所有具有此标记的餐馆,而不是其他类型的地方?

python django polymorphism django-queryset
1个回答
1
投票

最简单的方法是从filter调用Restaurant.objects,例如:

Restaurant.objects.filter(tags=tag)

但是如果你想从filter调用Place.objects,你必须在你的父模型中使用一个Django多态性应用程序,例如Django-Polymorphic,因为Django默认情况下不支持模型多态性。

注意:阅读关于OOP Polymorphism和This articleThis article,了解有关Django模型继承的一些额外信息。

© www.soinside.com 2019 - 2024. All rights reserved.