如何根据用户的查看权限编辑 Django 对象实例?



我想根据用户的查看权限对对象实例进行编辑。

例如,如果我有以下型号的

class Data(models.Model):
value = models.FloatField()

我希望有查看权限的用户(即myapp.view_data(能够看到完整的值,而没有查看权限的人只能看到经过编辑的版本,例如round(value)

我可以为每个视图和模板实现这一点,但这似乎不是很枯燥,并且有忽略某些事件的风险。此外,我认为在模板中,可以通过关系查询绕过该机制。

如何在模型中实现这种编校机制?这是个好做法吗?或者有更好的方法吗?

谢谢!

您可以创建一个名为get_modified_value(user)的类方法。这基本上将是值字段的包装器。它将使用User对象作为参数。根据该用户的权限,它将返回原始值或舍入值。

我建议这样做,因为模型完全不知道上下文或http请求。所以不管怎样,每次你想要这个值时,你都需要在视图中进行某种操作。对我来说,将用户传递给模型方法似乎是最干净的,但这可能有其自身的问题。

最新更新