我正在尝试代理某些模型字段的访问权限。我想要的一个简单示例。
@uppercase_fields(['name'])
class Book(models.Model):
name = models.CharField(max_length=50)
# .. more fields ..
给定一个名为='some_book'的书籍实例:
访问book.name
应该返回'SOME_BOOK'
我知道它看起来很奇怪,但我需要一个类似于模型字段的访问包装器,就像我正常访问模型字段一样。所以这里的方法不是一个选择。
我想过使用__getattr__
,但我读过它可能会弄乱django内部。有没有更好的方法,最好是简单的?
答案 0 :(得分:1)
我认为您必须使用__getattribute__
(而不是__getattr__
,因为只有在其他方式无法找到属性时才会调用它。
您的实现应该调用super().__getattribute__
来访问该值,然后修改它,如果它在装饰器列表中或按原样返回。