提问者:小点点

如果在django中设置了标志,则在模板中为id添加前缀


我的数据库是这样的:

| 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

我唯一的挑战是,如果使用模型方法如上,我将不得不更换更新的多个模板。

我正在寻找一个更好的解决方案,其中我只需要在模型文件中进行更改,而不是更新多个模板,以实现期望的结果。


共1个答案

匿名用户

那么您在多个模板中有{{policy.id}},并且希望通过更改models.py来更改其行为?

当然,您无法实现这一点,因为您事先没有正确地封装显示器。 这是一种痛苦,但是您将不得不在任何地方更改它,因为您访问的是模型上的特定属性。 添加use_updated_id是一个很好的想法,因为它将显示逻辑封装在一个函数中,而且将来如果需要更改显示,您所要做的就是更改新函数。

所以,继续,做那些成百上千的文件编辑,但是要确保现在你已经取得了很大的进步,并且促进了你的项目的可维护性。