Форум сайта python.su
Добрый день, как реализовать джанго методами такой запрос:
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 содержащий выборку из всех 3 таблиц и (допустим) разместить результат на html страничке в виде одной таблицы. Сначала я реализовал это с помощью курсора (cursor.execute(запрос)), html табличка работала нормально, теперь возникла необходимость сериализовать эту выборку в json (чтобы использовать YUI интерфейс ), вариант с курсором сериализовать не получилось, после курения документации пришел к выводу что лучше все таки сделать джанго методами, код компактнее и с сериализацией проблем не должно возникнуть. Сейчас попробовал через raw(), работает, но сериализовать пока не пробовал.
Офлайн
_unnamedОписание модели приведи. Как таблицы связаны: через OneToOneField(), ForeignKey() или вообще никак?
Добрый день, как реализовать джанго методами такой запрос:Нужно получить 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
Офлайн
Ну так какие проблемы возьми сделай три запроса через фильтр или даже через Q, рендерь это все в темплейт. Либо через QuerysetManager напиши свою функцию и получай то, что тебе нужно.
Офлайн
strannik747Примерно так, на самом деле всего 8 таблиц в среднем по 6 колонок каждая, поэтому упрощаю модель что бы зря не флудить, логика, я думаю, от этого не измениться.
Описание модели приведи. Как таблицы связаны: через OneToOneField(), ForeignKey() или вообще никак?
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 напиши свою функцию и получай то, что тебе нужно.
Офлайн
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
from django.db.models import Q
Отредактировано (Март 10, 2011 10:50:32)
Офлайн