Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2012 12:10:32

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

Доброе время суток!
Имеется несколько связанных между собой моделей:

class ModelA(model.Models):
...

class ModelB1(model.Models):
...
mda=ForeignKey(ModelA)
...

class ModelB2(model.Models):
mda=ForeignKey(ModelA)

class ModelC(model.Models):
mdb=ForeignKey(ModelB2)
Задача:
необходимо получить запрос, который бы объединял все 4 модели. Возможно ли осуществить такое силами django ORM или придется row sql писать?



Отредактировано (Фев. 14, 2012 12:11:59)

Офлайн

#2 Фев. 14, 2012 12:52:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

class ModelB1(model.Models):
...
mda=ForeignKey(ModelA)
...

class ModelB2(model.Models):
mda=ForeignKey(ModelA)
как это можно вбить в один запрос?
А если на самом деле так
class ModelA(model.Models):
...

class ModelB1(model.Models):
...
mda=ForeignKey(ModelA)
...

class ModelB2(model.Models):
mdb=ForeignKey(ModelB1)

class ModelC(model.Models):
mdc=ForeignKey(ModelB2)
То легко
queryset=ModelC.objects.get(pk=1)
print queryset.mdc.mdb.mda



Офлайн

#3 Фев. 14, 2012 14:36:21

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

хорошо, спасибо

Еще вопрос:
есть две таблицы
ModelA(…):
create_date=models.DateField(unique=True)


ModelB(…):
create_date=models.DateField(unique=True)


Можно ли связать эти таблицы по дате с помощью django orm?



Офлайн

#4 Фев. 15, 2012 05:05:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

Что значит связать? Вы хотите получить строку из таблицы А, дата которой соответствует дате некой строки из таблицы В?
Если так, то Вы ищите сложности там, где их нет

ModelA(...):
create_date=models.DateField(unique=True)
...

ModelB(...):
create_date=models.DateField(unique=True)
...
some_date_B=ModelB.objects.get(create_date=my_date).create_date
some_record_A=ModelA.objects.get(create_date=some_date_B)



Офлайн

#5 Фев. 16, 2012 11:01:51

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

не, мне нужно получить не запись. Мне нужно получить итоговую таблицу для последующих манипуляций.

ModelA(...):
create_date=models.DateField(unique=True)
summ=models.FloatField()

ModelB(...):
create_date=models.DateField(unique=True)
summ=model.FloatField()
и получить на выходе что-то вроде такой таблицы:
create_date | modela.summ | modelb.summ



Офлайн

#6 Фев. 16, 2012 12:46:31

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Объединение нескольких таблиц

если делать грубо и прямо - то завести третью таблицу, содержащую только даты, а create_date в моделях сделать foreign key, или, правильнее, OneToOneField.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version