我正在尝试创建的程序将处理描述杂货产品类别的数据,例如:牛奶,牛肉,玉米,当地水果等。我计划将此数据存储在MongoDB实例中,因此创建schema会很好。
我的问题的原因是类别具有子类别(乳制品:牛奶,奶酪,酸奶;肉类:牛肉,猪肉等),导致递归对象。
我查看了StackOverflow,如何在Python中处理这种结构。
class Category():
def _init_(self, name, amount, subcategories = ()):
self.name = name
self.amount = amount
for subcategory in subcategories:
assert isinstance(subcategory, Category)
self.subcategories = subcategories
这似乎是对的...
...但是直到我尝试将其绑定到架构中:
class Category(mongoengine.EmbeddedDocument):
def _init_(self, name, amount, subcategories = ()):
self.name = name
self.amount = amount
for subcategory in subcategories:
assert isinstance(subcategory, Category)
self.subcategories = subcategories
name = mongoengine.StringField(required=True)
amount = mongoengine.FloatField(required=True)
subcategories = mongoengine.EmbeddedDocumentListField(Category, default=None)
meta = {
'db_alias': 'core',
'collection': 'category',
'indexes': [
'name',
'amount',
'subcategories',
],
'ordering': ['-name']
}
运行此代码会导致错误:
subbcategories = mongoengine.EmbeddedDocumentListField(Category,default = None)NameError:未定义名称'Category']
我尝试引用父类别,而不是嵌入子类别:
parent_category = mongoengine.ObjectIdField(Category, default=None)
但是我仍然得到完全相同的错误消息:
parent_category = mongoengine.ObjectIdField(Category,default = None)NameError:未定义名称'Category']
我应该如何为这样的递归对象定义架构?有可能吗?
您可以尝试在此行中使用str 'Category'
而不是类型Category
:
subcategories = mongoengine.EmbeddedDocumentListField('Category', default=None)
[EmbeddedDocumentListField使用EmbeddedDocument
进行初始化。
[EmbeddedDocument accept str。