Уведомления

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

#1 Май 21, 2010 08:08:00

minotavr_x86
От:
Зарегистрирован: 2010-05-21
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение полей из нескольких таблиц

Есть вот такие модели

class Schet(models.Model):
nomer = models.CharField("Номер счета",max_length = 10)
document = models.ImageField("Счет",upload_to = '/home/minotavr_x86/python/scheta/src/scheta/documents')
date_in = models.DateField("Дата создания")
komu = models.CharField("Для кого счет",max_length = 30, null=True)
otdel = models.IntegerField("Отдел",max_length = 3, null=True)
na_chto = models.CharField("Краткое описание",max_length = 40, null=True)
scheta_prim = models.CharField("Примечание",max_length = 50, null=True)

class Way(models.Model):
id_schet = models.ForeignKey(Schet)
id_people = models.ForeignKey(People)
date = models.DateField("Дата")
podpis = models.BooleanField("Подпись")
stop = models.BooleanField("Остановка счета")
way_prim = models.CharField("Примечания",max_length = 50, null=True)
scheta = Schet.objects.annotate(Max('way__date'))
Что добавить к данному запросу, что бы в результате были все поля из обоих моделей?



Офлайн

#2 Май 21, 2010 09:37:13

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

Получение полей из нескольких таблиц

minotavr_x86
Что добавить к данному запросу, что бы в результате были все поля из обоих моделей?
1. Так делать нельзя. Если хотите объединять данные по разным моделям - придется вручную делать SQL-запросы.
2. Если я правильно понял, то здесть проще использовать related.
...
id_schet = models.ForeignKey(Schet, related_name = way)
...
Тогда из “счетов” получить “пути” -
...
for schet in scheta:
print schet.way # результат - объект класса Way
...



Офлайн

#3 Май 21, 2010 10:44:55

minotavr_x86
От:
Зарегистрирован: 2010-05-21
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение полей из нескольких таблиц

scheta = Schet.objects.annotate(Max('way__date'))    
way = [el.way_set.all().annotate(Max('date')) for el in scheta]
Я делал вот так,но это вариант мне плохо подходит. Мне надо данные в одну табличку на страницы залить.

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



Отредактировано (Май 21, 2010 11:01:18)

Офлайн

#4 Май 24, 2010 11:59:33

minotavr_x86
От:
Зарегистрирован: 2010-05-21
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение полей из нескольких таблиц

scheta = Schet.objects.extra(tables = ['dbscheta_way'], select = {'max_date':'date','stop':'dbscheta_way.stop','way_prim':'way_prim'},
where = ['date = (Select MAX(date) FROM dbscheta_way WHERE dbscheta_way.id_schet_id=dbscheta_schet.id) '] )
Я все таки докопался до истины.
Кто нибудь мржет предложить вариант по проще?



Офлайн

  • Начало
  • » Django
  • » Получение полей из нескольких таблиц[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version