Avarika Giri
Avarika Giri

Reputation: 53

Django Models: Multiplication of two fields

I want to multiply two fields from the model and display it in a template. I have two models:

class Priority(models.Model):
    priorityName=models.CharField(max_length=100)
    priorityScore=models.IntegerField()
    def __str__(self):
        return str(self.priorityScore)

class ImpactMatrix(models.Model):
    objectName=models.ForeignKey(ObjectName,on_delete=models.CASCADE)
    actionName=models.ForeignKey(ActionObject,on_delete=models.CASCADE)
    priority=models.ForeignKey(Priority,on_delete=models.CASCADE,related_name='priority')
    functional=models.ForeignKey(Priority,on_delete=models.CASCADE,related_name='functional')
    supervision=models.ForeignKey(Priority,on_delete=models.CASCADE,related_name='supervision')
    approval=models.ForeignKey(Priority,on_delete=models.CASCADE,related_name='approval')

I want to multiply the priorityScore in ImpactMatrix.priority * ImpactMatrix.functional

How do I do this?

Upvotes: 4

Views: 1620

Answers (2)

Nakul Narayanan
Nakul Narayanan

Reputation: 1452

You need to use a custom template tag.

you can refer the link for more info about custom template tags

@register.simple_tag()
def multiply(priority, functional, *args, **kwargs):
    return priority * functional

and you can you the tag in template like this

{% load your_custom_template_tags %}
{% multiply im_obj.priority.priorityScore  im_obj.functional.priorityScore %}

Upvotes: 1

JPG
JPG

Reputation: 88689

Define a @property in model and access it from template as any other model field,

class ImpactMatrix(models.Model):
    objectName = models.ForeignKey(ObjectName, on_delete=models.CASCADE)
    actionName = models.ForeignKey(ActionObject, on_delete=models.CASCADE)
    priority = models.ForeignKey(Priority, on_delete=models.CASCADE, related_name='priority')
    functional = models.ForeignKey(Priority, on_delete=models.CASCADE, related_name='functional')
    supervision = models.ForeignKey(Priority, on_delete=models.CASCADE, related_name='supervision')
    approval = models.ForeignKey(Priority, on_delete=models.CASCADE, related_name='approval')

    @property
    def some_name(self):
        return self.priority.priorityScore*self.functional.priorityScore

and in your tempate,

{% impactmatrix_object.some_name %}

Upvotes: 4

Related Questions