我的数据库是这样的:
| id | customer_account | -few more fields - | is_renewed |
| 25 | asd111 | - some values - | 0 |
| 26 | asd222 | - some values - | 1 |
| 27 | asd333 | - some values - | 1 |
| 28 | asd444 | - some values - | 0 |
在我的模型中,我有:
class Policy(models.Model):
customer_account = models.ForeignKey(CustomerAccount, on_delete=models.CASCADE)
--few more fields--
is_renewed = models.BooleanField(default = False)
def use_updated_id(self):
if self.is_renewed:
new_id = str("R") + str(self.id)
else:
new_id = self.id
return new_id
在我的模板中,我有:
{% for policy in policy_list % }
<p> Policy Number : {{policy.id}} </p>
{% endfor %}
它给出的输出为
Policy Number : 25
Policy Number : 26
Policy Number : 27
Policy Number : 28
我明白我可以在model中定义一个方法,并用它来代替下面的id来满足我的需求
{% for policy in policy_list % }
<p> Policy Number : {{policy.use_updated_id}} </p>
{% endfor %}
Policy Number : 25
Policy Number : R26
Policy Number : R27
Policy Number : 28
我唯一的挑战是,如果使用模型方法如上,我将不得不更换更新的多个模板。
我正在寻找一个更好的解决方案,其中我只需要在模型文件中进行更改,而不是更新多个模板,以实现期望的结果。
那么您在多个模板中有{{policy.id}}
,并且希望通过更改models.py
来更改其行为?
当然,您无法实现这一点,因为您事先没有正确地封装显示器。 这是一种痛苦,但是您将不得不在任何地方更改它,因为您访问的是模型上的特定属性。 添加use_updated_id
是一个很好的想法,因为它将显示逻辑封装在一个函数中,而且将来如果需要更改显示,您所要做的就是更改新函数。
所以,继续,做那些成百上千的文件编辑,但是要确保现在你已经取得了很大的进步,并且促进了你的项目的可维护性。