【发布时间】:2018-05-26 18:54:23
【问题描述】:
我正在尝试代理对某些模型字段的访问。我想要的一个简单的用法示例。
@uppercase_fields(['name'])
class Book(models.Model):
name = models.CharField(max_length=50)
# .. more fields ..
给定一个 name='some_book' 的书实例:
访问book.name 应该返回'SOME_BOOK'
我知道这看起来很奇怪,但我需要一个像这样围绕模型字段的访问包装器,它的作用就像我可以正常访问模型字段一样。所以方法在这里不是一个选项。
我曾想过使用__getattr__,但我读到它可能会与 django 内部结构混淆。有没有更好的方法,最好是简单的?
【问题讨论】:
-
只要您调用
super并且只操作特定字段的值,您应该可以覆盖__getattribute__。我认为没有其他方法。 -
需要小写存储吗?也许您的问题的另一种解决方案是在保存之前将字段设置为高位,这样您就不需要在访问字段时做任何特殊的事情
标签: python django django-models field