Django ManyToMany trhough summary calculation

Giving next models:

class Question(models.Model):
  question = models.TextField()
  output_params = models.ManyToManyField(OutputParam, through='OutputParamWeight')

class OutputParam(TimeStampModel):
  form = models.ForeignKey(Form, on_delete=models.CASCADE, related_name='output_params')
  name = models.CharField(max_length=255)

class OutputParamWeight(models.Model):
  output_param = models.ForeignKey(OutputParam, on_delete=models.CASCADE)
  question = models.ForeignKey(Question, on_delete=models.CASCADE)
  weight = models.IntegerField()

class Answer(TimeStampModel):
  question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
  value = models.IntegerField()

Every question affects N output params in a form multiplying x1, x2, x3 the associates answer value. For example:

Question 1 -> Output param 1 x1
              Output param 2 x3
              Output param 3 x2

Question 2 -> Output param 1 x2
              Output param 3 x3

Answer 1 -> Question 1
            Value 2

Answer 2 -> Question 2
            Value 3

So, what I'm trying to do now is summarize the form result as follows:

Output param 1: 6 (answer1.value * question1.output_param1.weight + answer1.value * question2.output_param1.weight)
Output param 2: 15

Which queries should I perform to get the final result in an optimized way?

Back to Top