我正在开发一个模型,该模型使用简单的黑客实现只读属性:
from pynamodb.models import Model
class MyModel(Model):
[…]
updated_at = UTCDateTimeAttribute()
def save(self):
self.updated_at = datetime.now(timezone.utc)
return super().save()使用此黑客,用户在创建实例时需要提供updated_at,即使该值将被忽略。
这个直接的问题可以通过updated_at = UTCDateTimeAttribute(null=True)解决,但是现在模型表明updated_at可能不是响应的一部分,事实并非如此。
基本上,我如何向用户发出信号:他们不能为字段提供值(理想情况下,试图设置updated_at应该会导致错误),但是该模型的每个实例都有该字段的值。
发布于 2021-05-18 04:28:18
您可以重写MyModel的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方法的类似更新,这些方法检查正在保存的对象与DB中的对象具有相同的updated_at值,这些更新应该足以满足上述需求。
https://stackoverflow.com/questions/66361105
复制相似问题