Django模型:两个字段相乘

4

我想在模板中将模型中的两个字段相乘并显示出来。 我有两个模型:

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')

我想要将ImpactMatrix.priority * ImpactMatrix.functional的priorityScore乘以一个系数。
我该如何操作?
2个回答

4

在模型中定义一个@property,并像其他模型字段一样从模板中访问它,

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')

    <b>@property
    def some_name(self):
        return self.priority.priorityScore*self.functional.priorityScore</b>

在你的模板中,

{% impactmatrix_object.some_name %}

如果你们中的一些人(就像我一样)发现@property装饰器中有一点黑魔法,我发现这篇关于为什么和如何使用它的教程非常有帮助:https://www.programiz.com/python-programming/property - Mads Jensen

1

您需要使用自定义模板标签。

您可以参考链接了解有关自定义模板标签的更多信息。

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

而且您可以在模板中像这样使用标签。
{% load your_custom_template_tags %}
{% multiply im_obj.priority.priorityScore  im_obj.functional.priorityScore %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接