MongoEngine中无法直接为ListField赋值?Python3创建文档遇阻
解决MongoEngine中ListField无法赋值的问题
嘿,我一眼就瞅出问题所在了——你的ListField定义写错啦!
在MongoEngine里,ListField接收的参数得是字段的实例,可不是字段类本身。你现在写的StringField是类对象,必须改成StringField()才行。
修正后的模型类
from mongoengine import * connect('mongoengine_testing', host='localhost', port=27017) class Chart(Document): instrument_ticker = StringField(max_length=40) chart_type = StringField(max_length=120) chart_name = StringField(max_length=120) # 这里要加括号,创建StringField的实例,还能顺便加个长度约束(可选) x = ListField(StringField(max_length=40)) y = ListField(StringField(max_length=40))
正确赋值的两种常用方式
改完模型后,你就能正常给ListField赋值了,两种实用方式供你选:
1. 创建文档时直接传入列表
# 实例化时直接赋值并保存 new_chart = Chart( instrument_ticker="TSLA", chart_type="candlestick", chart_name="Daily Price", x=["2024-01-01", "2024-01-02", "2024-01-03"], y=["250", "260", "255"] ).save()
2. 先实例化再逐个赋值
# 先创建实例,再慢慢赋值最后保存 chart = Chart() chart.instrument_ticker="AMZN" chart.chart_type="line" chart.chart_name="Yearly Growth" chart.x=["2020", "2021", "2022", "2023"] chart.y=["386B", "469B", "514B", "574B"] chart.save()
为啥原来的代码会出错?
MongoEngine需要通过字段实例来确认数据的校验规则(比如字符串长度、是否允许为空这些),如果你只传了StringField这个类,它没法识别这个ListField该存什么类型的数据,自然就没法正常接收你的赋值了。
另外要提醒下,要是你往x或y里塞了非字符串类型的元素,MongoEngine会直接抛出校验错误,这点可得留意哦!
内容的提问来源于stack exchange,提问作者kristian
相关产品推荐
相关产品推荐

