помочь с использованием ORM в Django для запроса UNION - PullRequest
0 голосов
/ 13 сентября 2010

Я делаю страницу истории для веб-сайта.Структура моих классов примерно такая:

alt text

class Person(models.Model):
    name = models.CharField(max_length=100)
    type = models.CharField(max_length=30)

class History(models.Model):
    date = models.DateField(max_length=100)
    action = models.CharField(max_length=250)
    person = models.ForeignKey(Person)

class Parent(Person):
    #some attributes that are not relevant

class Son(Person)
    parent = models.ForeignKey(Parent)
    #other attributes that are not relevant

это довольно просто ... у меня есть Parent , который имеет несколько Сыновья оба могут выполнять действия на веб-сайте, и все они сохраняются в таблице истории, содержащей ссылку на человека, который выполнил действие.Таблица истории выглядит примерно так:

date       | action        | person_id 
----------------------------------------
16-12-2010 | saved profile | 1
16-12-2010 | new child     | 2

для родителя, мне нужно отобразить все его действия и действия его сыновей. Используя sql, это будет:

SELECT * FROM History where person_id=1 
UNION 
SELECT h.* FROM History h JOIN Son s ON s.person_ptr_id=h.person_id WHERE s.parent_id=1 

, но у меня естьпонятия не имею, как это сделать с помощью ORM Джанго.Myabe с помощью двух запросов?цикл?Есть ли у вас какие-либо идеи?Я был бы очень признателен за помощь .. заранее спасибо

Кстати: я использую django 1.1

EDIT: Я добавил атрибуты в классы.Это только примеры, мои таблицы имеют больше атрибутов, но именно так django переводит отношения в таблицы

1 Ответ

1 голос
/ 14 сентября 2010

Я думаю, что это sql:

p = Parent.objects.get(id=1)
history_qs = History.objects.all()
history_qs = history_qs.filter(Q(person=p)|Q(person__in=Son.objects.filter(parent=p)))

Союз не является необходимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...