问题描述
我有课:
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”(https://www.codetable.net/decimal/99)
- 西里尔字母“с”(https://www.codetable.net/decimal/1089)
见下文:
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)
如果您使它们相同,则代码将像超级按钮一样工作