是否建议使用多个 django 过滤器?

Posted

技术标签:

【中文标题】是否建议使用多个 django 过滤器?【英文标题】:Is it advisible to use multiple django filters? 【发布时间】:2016-10-23 05:43:06 【问题描述】:

我有一种情况,我必须首先从对象实例中获取一个值,然后将它与另一个值相乘,然后从原始值中减去一些其他值。如果我使用多个过滤器可以吗?这是我的查询的快速演示。

我在template_filters.py 中有以下过滤器:

1) add():
2) subtract():
3) multiply():
4) calculate_emi():

我正在做以下操作。假设贷款是一个对象实例:

    loan|calculate_emi|multiply:loan.duration|subtract|paid_emi 

这样的级联过滤器可以使用吗?如果有其他更好的方法,请提出建议。

【问题讨论】:

【参考方案1】:

我过去曾遇到过此类问题。当您像以前那样使用多个过滤器时,可能会变得非常混乱。

一种解决方案可能是声明一个模型函数。仅当您不依赖于另一个模型的属性时才能这样做。

例子:

class Loan(models.Model):  
    duration = models.IntegerField()
    emi = models.IntegerField()

    def duration_times_emi(self):
        return self.duration * self.emi

可以在模板中的模型实例上调用该函数:

 loan.duration_times_emi 

同样,只有在您可以访问 Loan 模型级别所需的所有变量时,这才会对您有用。

【讨论】:

可读性对我来说不是问题,我更担心功能上前所未有的错误。我宁愿在视图中做同样的事情并将其发送到模板,而不是创建模型。你怎么看? 如果它是一次性案例并且您不必在其他地方重复此代码,您可以计算视图中的值并将其发送到模板。我想这就是你的解决方案!如果您找到更好的方法,请告诉我..

以上是关于是否建议使用多个 django 过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Django将多个参数传递给If语句中的自定义模板过滤器

Django模板进阶007

从 django 模板 yesno 过滤器返回单个逗号

Django使用icontains过滤器和字典中的多个值

大 O 表示法:在 Django 模板中使用多个 forloops VS 在 vi​​ews.py 中使用过滤器的多个查询

使用多选表单在 DJANGO 中过滤