以前使用walrus大部分情况用的都是TextField类型,今天使用ListField时遇到一些坎坷,所以把今天的问题在这里记录一下。
使用TextField时直接可以用 cls.create() 给redis设置值,但是ListField时会报错:
ValueError: Cannot set the value of a container field.
意思是不可以插入值在容器类里边(ListField是一个container field)
在网上搜了好久也没找到答案,然后就在官方文档里边找到这样一句话:
就是说在ListField中插入值必须先实例化一个对象,利用对象的方法进行插值,文档中也给出了这样一个案例:
class Note(Model):
__database__ = db
text = TextField()
timestamp = DateTimeField(
default=datetime.datetime.now,
index=True)
tags = SetField()
>>> note = Note.create(content='my first note')
>>> note.tags
<Set "note:container.tags.note:id.3": 0 items>
>>> note.tags.add('testing', 'walrus')
>>> Note.load(note._id).tags
<Set "note:container.tags.note:id.3": 0 items>
ok!问题解决!