我需要进行否定查询。在 Django 中我会使用exclude(),但对于MongoEngine 文档排除意味着不同的东西。
是否有查询运算符或不同的函数来进行否定?
例子:
MyClass.objects.exclude(attribute="test")
Run Code Online (Sandbox Code Playgroud) 这段代码炸弹:
from mongoengine import *
class Employee(Document):
name = StringField()
boss = ReferenceField("Employee", reverse_delete_rule = NULLIFY)
Run Code Online (Sandbox Code Playgroud)
以下是例外情况:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "[…]/mongoengine/base.py", line 791, in __new__
new_class = super_new(cls, name, bases, attrs)
File "[…]/mongoengine/base.py", line 630, in __new__
f.document_type.register_delete_rule(new_class,
File "[…]/mongoengine/fields.py", line 757, in document_type
self.document_type_obj = get_document(self.document_type_obj)
File "[…]/mongoengine/base.py", line 136, in get_document
""".strip() % name)
mongoengine.base.NotRegistered: `Employee` has not been registered
in the document registry.
Importing the document class automatically …Run Code Online (Sandbox Code Playgroud) 我有以下模型:
class Post(Document):
body = db.StringField(required=True)
author = db.StringField(verbose_name="Author", max_length=255, required=True)
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
comments = db.ListField(db.EmbeddedDocumentField('Comment'))
Run Code Online (Sandbox Code Playgroud)
和下面的视图:
from flask.ext.mongoengine.wtf import model_form
@app.route('/')
def home():
form = model_form(Post, exclude=('created_at', 'comments'))
return render_template('home.html', form=form)
Run Code Online (Sandbox Code Playgroud)
我不知道如何在模板中呈现此表单。我确实尝试了几件事:
{% for field in form %}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
TypeError: 'FormMeta' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
{{ form.body() }}
Run Code Online (Sandbox Code Playgroud)
有不同的错误:
AttributeError: 'UnboundField' object has no attribute '__call__'
Run Code Online (Sandbox Code Playgroud)
和{{form.body}}这样的渲染
<UnboundField(TextAreaField, (), {'default': None, 'validators': [<wtforms.validators.Required object at 0x7f63804d0fd0>], 'description': '', 'filters': [], …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个传递键/值参数来获取对象的 get 方法。
def find_by_one(self, val, key='id'):
obj = self.__model__.objects(key=val).first()
return obj if obj else None
Run Code Online (Sandbox Code Playgroud)
我得到的错误
InvalidQueryError: Cannot resolve field "key"
Run Code Online (Sandbox Code Playgroud)
亲切地回答了我的问题。我最终改变了我的方法来传递 **kwargs 并将其作为我的查询集传递
def find_by_one(self, **kwargs):
user = self.__model__.objects(**kwargs).first()
return user if user else None
Run Code Online (Sandbox Code Playgroud)
现在我可以调用我的 find_by_one
obj.find_by_one(id=obj_id)
Run Code Online (Sandbox Code Playgroud)
代替
obj.find_by_one(obj_id)
Run Code Online (Sandbox Code Playgroud) 我正试图把烧瓶挂到mongoengine上.所有模块似乎都已成功安装.这是我的导入,而ln 4是错误源自的地方:
import os
from flask import Flask, render_template, send_from_directory
from mongoengine import connect
from flask.ext.mongoengine import MongoEngine
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
File "app.py", line 4, in <module>
from flask.ext.mongoengine import MongoEngine
File "/Users/name/Desktop/venv3/lib/python2.7/site-packages/flask/exthook.py" line 87, in load_module
raise ImportError('No module named %s' % fullname)
ImportError: No module named flask.ext.mongoengine
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么或者如何获得flask.ext.mongoengine的任何想法?
基于本教程,我正在尝试创建一个表单来进行一些测量.似乎显示数据的部分正在工作,但是当使用model_form命令生成输入表单时,它会突然出现以下错误:
在转换'description'中输入文件"/myproject/lib/python3.4/site-packages/flask_mongoengine/wtf/orm.py",第49行:field.help_text或'',
AttributeError:'ObjectIdField'对象没有属性'help_text'
错误发生在我的代码的这一行:
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
Run Code Online (Sandbox Code Playgroud)
这是我的view.py代码:
from flask import Blueprint, request, redirect, render_template, url_for
from flask.views import MethodView
from flask.ext.mongoengine.wtf import model_form
from pyReefLog.models import Measurement
measurements = Blueprint('measurements', __name__, template_folder='templates')
class List(MethodView):
cls = Measurement
def get(self):
measurements = self.cls.objects.all()
return render_template('measurements/list.html', measurements=measurements)
class Detail(MethodView):
def get_context(self, creator=None):
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
if creator:
measurement = Measurement.objects.get_or_404(creator=creator)
if request.method == 'POST':
form = form_cls(request.form, inital=measurement._data)
else:
form = …Run Code Online (Sandbox Code Playgroud) 我对我的models.py. 我将字段从 更改FileField()为ImageWithThumbsField()
from mongoengine import *
from gradfounder.settings import DBNAME
from embed_video.fields import EmbedVideoField
from thumbs import ImageWithThumbsField
##########################################
# Mongoengine registration/authentication
#from mongoengine.django.auth import User
##########################################
#connect(DBNAME)
# connect(DBNAME, host='127.0.0.1', port=27017)
connect(DBNAME, host='xxx.xxx.xxx.xxx', port=27017)
class Author(Document):
# photo = FileField()
photo = ImageWithThumbsField(upload_to="avatars")
photoname = StringField()
Run Code Online (Sandbox Code Playgroud)
然后我得到了这个错误
File "C:\Python27\lib\site-packages\mongoengine\base\document.py", line 80, in
__init__
raise FieldDoesNotExist(msg)
FieldDoesNotExist: The field 'photo' does not exist on the document 'Author'
Run Code Online (Sandbox Code Playgroud)
我尝试迁移,syncdb但出现错误DatabaseError: (1050, "Table 'profiles_profile' …
我们计划使用 Flask 和 Mongoengine 开发一个应用程序。然而,我们已经在非 Flask 应用程序中使用了一些 mongoengine 文档定义,如果可能的话,我们希望将这些定义重构到一个包中,以便在 Flask 和非 Flask 应用程序中使用它。
这可能吗?我已经阅读了 Flask Mongoengine 的初始化代码,它似乎只是覆盖了文档的一些基类,并从 Flask 应用程序中提取配置。另外,我发现了这个(未回答的)问题:
是否有一个选项允许在 mongoengine 中使用磁盘?我在网上找不到任何资源。
我试过
model.objects.aggregate(pipeline, {'allowDiskUse': True})
Run Code Online (Sandbox Code Playgroud)
这会抛出:
Each element of the 'pipeline' array must be an object
Run Code Online (Sandbox Code Playgroud) 标题。这两个陈述是做同样的事情,还是我在这里错过了什么?
cars = db.EmbeddedDocumentListField(Car, default= [])
Run Code Online (Sandbox Code Playgroud)
与
cars = db.ListField(db.EmbeddedDocumentField(Car), default=[])
Run Code Online (Sandbox Code Playgroud)