Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2008 13:33:48

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить ORM запрос по SQL

Подскажите модель Material - кол-во материалов, Rashod - израсходаванные материалы

class Material(models.Model):
name = models.CharField(max_length=100)
nomer_materiala = models.CharField(max_length=50)
count = models.DecimalField(max_digits=10, decimal_places=5)
MVZ = models.CharField(max_length=50)
comment = models.TextField ()
obect = models.CharField(max_length=30)

def __unicode__(self):
return '%s %s' % (self.nomer_materiala, self.name)

class Rashod(models.Model):
material = models.ForeignKey(Material)
count = models.DecimalField(max_digits=10, decimal_places=5)
proekt = models.CharField(max_length=30)
ispolnitel = models.ForeignKey(Person)
#building = models.CharField(max_length=30)
Есть SQL запрос для получения нужного результата:
SELECT ostatki_Material.Name, Sum(ostatki_Rashod.Count)
FROM ostatki_Rashod INNER JOIN ostatki_Material ON ostatki_Rashod.Material_id = ostatki_Material.ID
GROUP BY ostatki_Material.Name;
Как перевести такой запрос на django orm?

Можно сделать цикл for по значениям nomer_materiala из таблицы и просуммировать у построчно примерно так:
select sum(count) from ostatki_rashod where ostatki_rashod.nomer_materiala = nomer_materiala
для такого SQL запроса orm смог составить
Rashod.objects.all().count()
но считаю что это не самый правильный путь, так как операцию цикла лучше переложить на SQL сервер чем на интерпретатор питона.

P.S. про ORM почитал, но как задачку решить пока не осознал, дайте напутствия



Офлайн

#2 Ноя. 20, 2008 16:12:18

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите составить ORM запрос по SQL

Использовать:
- extra: http://docs.djangoproject.com/en/dev/ref/models/querysets/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none
- и недокументированный group_by: http://www.eflorenzano.com/blog/post/secrets-django-orm/

Пока нормальных агрегаций в джанге нет.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version