@JonGalt

Сложный запрос в Django?

models.py
class Design(models.Model):
    object = models.ForeignKey(Object)
    company = models.ForeignKey(Company)
    number = models.CharField(max_length=32, verbose_name=u'Шифр проекта')

class Specification(models.Model):
    design = models.ForeignKey(Design)
    name = models.CharField(verbose_name=u'Название спецификации', max_length=32)
    construction_type = models.ForeignKey(ConstructionType, verbose_name=u'Тип конструкций')
    drawings = models.ManyToManyField(Drawing, verbose_name=u'Листы проекта')
    amount = models.FloatField(verbose_name=u'Количество', default=1)
    unit_measure = models.ForeignKey(UnitMeasure, verbose_name=u'Ед. изм.')

class SpecificationMaterial(models.Model):
    specification = models.ForeignKey(Specification)
    material = models.ForeignKey(Material)
    amount = models.FloatField(verbose_name=u'Количество')

class Construction(models.Model):
    object = models.ForeignKey(Object, verbose_name=u'Объект')
    type = models.ForeignKey(ConstructionType, verbose_name=u'Тип конструкции')
    name = models.CharField(max_length=128, verbose_name=u'Название конструкции')

class ConstructionSpecification(models.Model):
    construction = models.ForeignKey(Construction)
    specification = models.ForeignKey(Specification)
    amount = models.FloatField(verbose_name=u'Количество', default=1)

class Material(models.Model):
    group = models.ForeignKey(MaterialGroup)
    code = models.CharField(max_length=48, verbose_name=u'Артикул', blank=True)
    name = models.CharField(max_length=128, verbose_name=u'Название материала')
    unit_measure = models.ForeignKey(UnitMeasure)
    price = models.FloatField(verbose_name=u'Цена', blank=True)


логика такая:
Есть том проектной документации (Design), в нем есть спецификации (Specification), они состоят из материалов (SpecificationMaterial), и есть конструкции (Construction). Конструкции делаются из материалов которые есть в спецификации, причем конструкция может состоять из нескольких спецификаций.
Одна спецификация составляется на какой либо объем, поэтому в ней есть поле amount (количество), и в модели SpecificationConstruction тоже есть такое же поле в нем указывается какая часть (или сколько частей) спецификации используется в конкретной конструкции.
Расчет одного материала:
material_amount = SpecificationConstruction.amount / Specification.amount * SpecificationMaterial.amount

Надо посчитать сколько всего материалов и их стоимость по объекту Design.
  • Вопрос задан
  • 270 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы