Python MongoEngine Field没有文本错误,但实际上是

Python MongoEngine Field没有文本错误,但实际上是,python,mongodb,error-handling,mongoengine,Python,Mongodb,Error Handling,Mongoengine,我有一门课: 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 = DateTimeFiel

我有一门课:

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”一模一样的西里尔字母

事实上:

  • 拉丁语“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)

如果将它们设置为相同的值,代码将像一个由is int字段收集的符咒一样工作,并在其中传递字符串“NONE”