Фильтр по типу дочернего класса - PullRequest
0 голосов
/ 20 октября 2018

Допустим, у нас есть класс 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")

Для данного тега, как я могу получить набор запросов, выбирая все Рестораны, которые имеют этот тег, но не другие места?

1 Ответ

0 голосов
/ 20 октября 2018

Самый простой способ сделать это - вызвать filter из Restaurant.objects с чем-то вроде:

Restaurant.objects.filter(tags=tag)

Но если вы хотите позвонить filter из Place.objects, вы должны использовать один изПриложения Django для полиморфизма, такие как Django-Polymorphic в родительской модели, поскольку Django по умолчанию не поддерживает модели полиморфизма.

Примечание: Чтение Эта статья о полиморфизме ООП & В этой статье приведена дополнительная информация о наследовании модели Django.

...