如何解决如何在 pynamodb 中创建只读模型属性?
我正在开发一个模型,该模型通过简单的 hack 实现只读属性:
from pynamodb.models import Model
class MyModel(Model):
[…]
updated_at = UTCDateTimeAttribute()
def save(self):
self.updated_at = datetime.Now(timezone.utc)
return super().save()
使用此 hack 时,用户需要在创建实例时提供 updated_at
,即使该值将被忽略。
这个紧迫的问题可以通过 updated_at = UTCDateTimeAttribute(null=True)
解决,但现在模型表明 updated_at
可能不是响应的一部分,事实并非如此。
基本上,我如何向用户表明他们不能为字段提供值(理想情况下尝试设置 updated_at
应该会导致错误),但是每个实例这个模型会有这个字段的值吗?
解决方法
您可以覆盖 __init__
的 MyModel
方法以检查传递的属性中是否存在 updated_at
,如果存在则引发异常:
class MyModel(Model):
def __init__(self,hash_key=None,range_key=None,_user_instantiated=True,**attributes):
if "updated_at" in attributes.keys():
raise IllegalArgumentException
super().__init__(
hash_key=hash_key,range_key=range_key,_user_instantiated=_user_instantiated,**attributes,)
对 save
和 update
方法进行类似更新,检查正在保存的对象是否与数据库中的对象具有相同的 updated_at
值,应该足以满足上述要求.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。