Найти - Пользователи
Полная версия: Помогите составить ORM запрос по SQL
Начало » Django » Помогите составить ORM запрос по SQL
1
qman
Подскажите модель 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 почитал, но как задачку решить пока не осознал, дайте напутствия
Александр Кошелев
Использовать:
- 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/

Пока нормальных агрегаций в джанге нет.
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