Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Queryset. Формирование запроса из нескольких таблиц. [RSS Feed]

#1 Март 9, 2011 11:34:50

_unnamed
От:
Зарегистрирован: 2011-02-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

Добрый день, как реализовать джанго методами такой запрос:

SELECT table1.id, table1.one, table1.two, table2.id, table2.one, table2.two, table3.id, table3.one, table3.two
FROM table1, table2, table3
WHERE table1.id = table2.id and table1.id = table3.id
Нужно получить Queryset из подобного запроса.



Офлайн

#2 Март 9, 2011 15:11:38

freemon
От:
Зарегистрирован: 2008-07-17
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

А можно задачу по точнее поставить, для чего формировать такой запрос?..



Офлайн

#3 Март 10, 2011 07:00:45

_unnamed
От:
Зарегистрирован: 2011-02-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

Смысл в том чтобы получить QuerySet содержащий выборку из всех 3 таблиц и (допустим) разместить результат на html страничке в виде одной таблицы. Сначала я реализовал это с помощью курсора (cursor.execute(запрос)), html табличка работала нормально, теперь возникла необходимость сериализовать эту выборку в json (чтобы использовать YUI интерфейс ), вариант с курсором сериализовать не получилось, после курения документации пришел к выводу что лучше все таки сделать джанго методами, код компактнее и с сериализацией проблем не должно возникнуть. Сейчас попробовал через raw(), работает, но сериализовать пока не пробовал.



Офлайн

#4 Март 10, 2011 08:45:59

strannik747
От:
Зарегистрирован: 2011-02-19
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

_unnamed
Добрый день, как реализовать джанго методами такой запрос:

SELECT table1.id, table1.one, table1.two, table2.id, table2.one, table2.two, table3.id, table3.one, table3.two
FROM table1, table2, table3
WHERE table1.id = table2.id and table1.id = table3.id
Нужно получить Queryset из подобного запроса.
Описание модели приведи. Как таблицы связаны: через OneToOneField(), ForeignKey() или вообще никак?



Офлайн

#5 Март 10, 2011 09:13:54

freemon
От:
Зарегистрирован: 2008-07-17
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

Ну так какие проблемы возьми сделай три запроса через фильтр или даже через Q, рендерь это все в темплейт. Либо через QuerysetManager напиши свою функцию и получай то, что тебе нужно.



Офлайн

#6 Март 10, 2011 09:43:16

_unnamed
От:
Зарегистрирован: 2011-02-03
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

strannik747
Описание модели приведи. Как таблицы связаны: через OneToOneField(), ForeignKey() или вообще никак?
Примерно так, на самом деле всего 8 таблиц в среднем по 6 колонок каждая, поэтому упрощаю модель что бы зря не флудить, логика, я думаю, от этого не измениться.
class table1(models.Model):
one = models.CharField()
two = models.CharField()
class Meta:
db_table = u'table1'

class table2(models.Model):
one = models.CharField()
two = models.CharField()
fk = models.ForeignKey(table1)
class Meta:
db_table = u'table2'

class table3(models.Model):
one = models.CharField()
two = models.CharField()
fk = models.ForeignKey(table1)
class Meta:
db_table = u'table3'
freemon
Либо через QuerysetManager напиши свою функцию и получай то, что тебе нужно.
Спасибо за наводку, буду читать документацию.



Офлайн

#7 Март 10, 2011 10:46:02

freemon
От:
Зарегистрирован: 2008-07-17
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Queryset. Формирование запроса из нескольких таблиц.

from django.db import models

class FooModelQuerySet(models.query.QuerySet):

def some_function(self):
#do something with this object
pass

class FooModelManager(models.Manager):

def get_query_set(self):
return FooModelQuerySet(self.model)

class FooModel(models.Model):
#your model
pass
Для запросов со сложными условиями используй Q:
from django.db.models import Q
http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects



Отредактировано (Март 10, 2011 10:50:32)

Офлайн

  • Начало
  • » Django
  • » Queryset. Формирование запроса из нескольких таблиц.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version