You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:35:34