Найти - Пользователи
Полная версия: Queryset. Формирование запроса из нескольких таблиц.
Начало » Django » Queryset. Формирование запроса из нескольких таблиц.
1
_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 из подобного запроса.
freemon
А можно задачу по точнее поставить, для чего формировать такой запрос?..
_unnamed
Смысл в том чтобы получить QuerySet содержащий выборку из всех 3 таблиц и (допустим) разместить результат на html страничке в виде одной таблицы. Сначала я реализовал это с помощью курсора (cursor.execute(запрос)), html табличка работала нормально, теперь возникла необходимость сериализовать эту выборку в json (чтобы использовать YUI интерфейс ), вариант с курсором сериализовать не получилось, после курения документации пришел к выводу что лучше все таки сделать джанго методами, код компактнее и с сериализацией проблем не должно возникнуть. Сейчас попробовал через raw(), работает, но сериализовать пока не пробовал.
strannik747
_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() или вообще никак?
freemon
Ну так какие проблемы возьми сделай три запроса через фильтр или даже через Q, рендерь это все в темплейт. Либо через QuerysetManager напиши свою функцию и получай то, что тебе нужно.
_unnamed
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 напиши свою функцию и получай то, что тебе нужно.
Спасибо за наводку, буду читать документацию.
freemon
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB