python - 无法从另一个 python 代码访问 ListField 元素
问题描述
您好,我想使用一个名为 common 的应用程序在两个 django 应用程序(监视器、管理器)之间共享一个 mongodb。
我可以轻松地在管理器应用程序中创建数据库实例,但是在访问书籍作者时我不能。
它返回此错误
mongoengine.errors.FieldDoesNotExist:文档“author”中不存在字段“{'_id'}”
模型.py
from mongoengine import *
class author(Document):
name = StringField(required = True)
meta = {'abstract': True , 'allow_inheritance':True}
class book(Document):
name = StringField(required = True)
authors = ListField(ReferenceField(author))
meta = {'abstract': True , 'allow_inheritance':True}
管理器.py
from mongoengine import *
from models import *
class author(author):
def rand(self):
print("i am useless")
class book(book):
def rand2(self):
print("i am also useless")
if __name__ == "__main__":
connect('test', host = '0.0.0.0',port = 27017)
a1 = author(name = "Charef")
a1.save()
a2 = author(name = "hamid")
a2.save()
a3 = author(name = "djoudi")
a3.save()
a4 = author(name = "cheb khaled")
a4.save()
book1_authors = [a1,a2,a4]
book2_authors = [a1,a3]
book1 = book(name = "Hello Django", authors = book1_authors)
book1.save()
book2 = book(name = "Hello python", authors = book2_authors)
book2.save()
监视器
from mongoengine import *
from models import *
class author(author):
def say_hi(self):
print("Hi, my name is {} and this is my book".format(self.name))
class book(book):
def book_info(self):
for author in self.authors:
print(author.say_hi())
print("done !! ")
if __name__ == "__main__":
connect("test",host = "0.0.0.0", port = 27017)
s_book = book.objects()[0]
print(s_book.name)
print(len(s_book.authors))
解决方案
为不同的类使用唯一的名称(例如BaseBook
抽象类和Book
具体类)。mongoengine 的一些内部结构依赖于类名的唯一性,因此反对它不是一个好主意。
使用以下作品:
class BaseAuthor(Document):
name = StringField(required=True)
meta = {'abstract': True , 'allow_inheritance':True}
class BaseBook(Document):
name = StringField(required=True)
authors = ListField(ReferenceField(BaseAuthor))
meta = {'abstract': True , 'allow_inheritance':True}
class Author(BaseAuthor):
def rand(self):
print("i am useless")
class Book(BaseBook):
def rand2(self):
print("i am also useless")
此外,如果可能的话Book/Author
,在监视器和管理器中使用相同的类
推荐阅读
- javascript - 是否可以直接从chrome打印pdf?
- windows - 为什么我的应用程序不消耗 CPU 和 RAM?
- webgl - WebGL 点光源问题
- angular - 为什么我的 Eclipse 控制台中有多个 Angular 语言服务器选项卡
- wso2 - 当我们在 WSO2 ESB 中安排任何任务时,我可以通过浏览器将任何参数传递给任务吗?
- sql - 如何获取日期集的(周数,周数)
- npm - npm 或纱线,`node-gyp 重建` npm 错误!退出状态 1
- python - 从输出中删除新行
- java - 从 MQTT 服务器接收消息时,Protobuf Java 方法 parseFrom() 挂起
- azure-machine-learning-studio - Azure 机器学习 FileDataSet 图像 - 分片/拆分到节点