Модели подклассов фильтра Джанго - PullRequest
1 голос
/ 02 мая 2011

У меня есть (по сути) следующие модели:

class foo(models.model):
    name = models.CharField(max_length=255)
    size = models.PositiveIntegerField()

class bar(foo):
    colour = models.CharField(max_length=25)

class baz(foo):
    material = models.CharField(max_length=25)

Что я хочу сделать, так это отфильтровать эти модели на основе параметров URL. Таким образом, если URL-адрес равен http://www.mysite.com/catalogue/foo?size=3, то отображаются все объекты foo, bar и baz размера 3.

Если URL равен http://www.mysite.com/catalogue/foo?size=3&colour=red&colour=green, тогда отображаются все foo объекты с атрибутами size и colour (то есть bar объекты), если размер равен 3, а цвет красный или зеленый.

Может ли это работать?

1 Ответ

2 голосов
/ 03 мая 2011

(Обновление: Этот ответ на ранее заданный вопрос лучше, чем то, что я написал ниже.)

Эта статья объясняет, почему это неэффективно вDjango - в основном, потому что это потребовало бы дорогих объединений через таблицы для всех подклассов.(Я написал ORM, который делает полиморфизм подобным образом, и запросы очень быстро выходят из-под контроля. Парни из Django приняли здесь правильное решение.)

В статье описывается метод написания MixIn для запроса.каждый подкласс индивидуален.Если вам нужно такое поведение в вашем приложении, рассмотрите возможность реализации чего-то подобного.

Если это для одного представления, вам может быть лучше (быстрее и легче понять) просто написать свое представление для запроса каждого подкласса.и создайте список всех результатов.

...