首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在pynamodb中创建只读模型属性?

如何在pynamodb中创建只读模型属性?
EN

Stack Overflow用户
提问于 2021-02-25 01:19:12
回答 1查看 248关注 0票数 1

我正在开发一个模型,该模型使用简单的黑客实现只读属性:

代码语言:javascript
复制
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应该会导致错误),但是该模型的每个实例都有该字段的值。

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 04:28:18

您可以重写MyModelMyModel方法,以检查在传递的属性中是否存在updated_at,并在出现异常时引发异常:

代码语言:javascript
复制
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,
        )

对于saveupdate方法的类似更新,这些方法检查正在保存的对象与DB中的对象具有相同的updated_at值,这些更新应该足以满足上述需求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66361105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档