MongoEngine fieldDoesNotExist错误,但实际上是

问题描述

我有课:

class POI(Document):
    location = PointField(required=True)
    name = StringField(default='')
    generate_by = IntField(required=True)
    status = StringField(default='Active')
    colleсted_by = IntField()
    time_created = DateTimeField(default=datetime.datetime.Now)

当我尝试插入

POI(location=[55.430212,30.521000],generate_by=1241254,name="Sample",collected_by=None)

发生错误

mongoengine.errors.FieldDoesNotExist: The fields "{'collected_by'}" do not exist on the document "POI"

怎么了?

解决方法

您实际上在两个“ collected_by”字符串中有一个很小的错字,这使它们有所不同,由于某种原因,您在此处使用的“ c”:

class POI(Document):
    location = PointField(required=True)
    name = StringField(default='')
    generate_by = IntField(required=True)
    status = StringField(default='Active')
    colleсted_by = IntField()
         ^
         |

不是常规的拉丁字母“ c”,而是西里尔字母,看起来完全像拉丁文的“ c”。

事实上:

见下文:

In [16]: "collected_by" == "colleсted_by"
Out[16]: False

In [17]: "с" == "c"
Out[17]: False

In [20]: ord("с"),ord("c")
Out[20]: (1089,99)

如果您使它们相同,则代码将像超级按钮一样工作

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...