2014-09-12 129 views
2

这是错误:瓶:model_form:AttributeError的:对象类型 '形' 有没有属性 '查询'

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1701, in __call__ return self.wsgi_app(environ, start_response) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1689, in wsgi_app response =self.make_response(self.handle_exception(e)) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1687, in wsgi_app response = self.full_dispatch_request() 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1360, in full_dispatch_request rv = self.handle_user_exception(e) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1358, in full_dispatch_request rv = self.dispatch_request() 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/app.py", 
    line 1344, in dispatch_request return 
    self.view_functions[rule.endpoint](**req.view_args) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/views.py", 
    line 83, in view return self.dispatch_request(*args, **kwargs) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/views.py", 
    line 150, in dispatch_request return meth(*args, **kwargs) 

File"/www/sites/MyBlog/app/posts.py", line 38, in get return 
    render_template('posts/detail.html', **context) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/templating.py", 
    line 125, in render_template context, ctx.app) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/flask/templating.py", 
    line 107, in _render rv = template.render(context) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/jinja2/environment.py", 
    line 894, in render return 
    self.environment.handle_exception(exc_info, True) 

File"/www/sites/MyBlog/app/templates/posts/detail.html", line 9, in 
    toplevel template code {% block content %} 

File"/www/sites/MyBlog/app/templates/posts/detail.html", line 23, in 
    block "content" {{ forms.render(form) }} 

File"/www/sites/MyBlog/app/templates/_forms.html", line 13, in template 
    {{ field() }} 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/wtforms/fields/core.py", 
    line 140, in __call__ return self.widget(self, **kwargs) 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/wtforms/widgets/core.py", 
    line 246, in __call__ for val, label, selected in field.iter_choices(): 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/wtforms/ext/sqlalchemy/fields.py", 
    line 108, in iter_choices for pk, obj in self._get_object_list(): 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/wtforms/ext/sqlalchemy/fields.py", 
    line 99, in _get_object_list Display the sourcecode for this 
    frameOpen an interactive python shell in this framequery = self.query 
    or self.query_factory() 

File"/www/sites/blog/flask/lib/python2.7/sitepackages/wtforms/ext/sqlalchemy/orm.py", 
    line 117, in <lambda> 'query_factory': lambda: 
    db_session.query(foreign_model).all() AttributeError: type object 
    'Form' has no attribute 'query' 

这是我view.py方法

class DetailView(MethodView): 

    def get_context(self, slug): 

    p = Post('','',slug) 
    post = p.get_or_404(slug) 

    form = model_form(Comment, Form, exclude=['timestamp'])(request.form) 
    context = { 
     "post": post, 
     "form": form 
    } 
    return context 

    def get(self, slug): 
    context = self.get_context(slug) 
    return render_template('posts/detail.html', **context) 

    def post(self, slug): 
    context = self.get_context(slug) 
    form = context.get('form') 

    if form.validate_on_submit(): 
     comment = Comment() 
     form.populate_obj(comment) 

     post = context.get('post') 
     post.comments.append(comment) 
     db.session.commit() 

     return redirect(url_for('posts.detail', slug=slug)) 

    return render_template('posts/detail.html', **context) 

这是我的模板形式:

{% macro render(form) %} 
<fieldset> 
{% for field in form %} 
{% if field.type in ['CSRFTokenField', 'HiddenField'] %} 
    {{ field() }} 
{% else %} 
    <div class="clearfix {% if field.errors %}error{% endif %}"> 
    {{ field.label }} 
    <div class="input"> 
     {% if field.name == "body" %} 
     {{ field(rows=10, cols=40) }} 
     {% else %} 
     {{ field() }} 
     {% endif %} 
     {% if field.errors or field.help_text %} 
     <span class="help-inline"> 
     {% if field.errors %} 
      {{ field.errors|join(' ') }} 
     {% else %} 
      {{ field.help_text }} 
     {% endif %} 
     </span> 
     {% endif %} 
    </div> 
    </div> 
{% endif %} 
{% endfor %} 
</fieldset> 
{% endmacro %} 

我正在与下列代码

form = model_form(Comment, Form, exclude=['timestamp'])(request.form) 

和一个错误:

{{ field() }} 

请提出了一些解决方案。提前致谢。

+0

你manged上悬而未决呢? – 2015-03-24 15:35:20

回答

4

我会发布我的解决方案,即使它不完美。

经过这样的努力,我发现当db_session试图从数据库中查询,当foreign_model不是他正在编辑的模型时,它失败了,它实际上是我有的关系。

SLOVED BY

exclude = ['user', 'offers', 'languages', 'company'] 
MyForm = model_form(Driver, Form, exclude=exclude) 

在我的模型,我不得不排除所有的关系。工作正常,仍然不知道如何编辑它们,但在我的情况下,我没有必要。

UPDATE

我设法通过我的会议,而不是Form这样来解决这个问题:

MyForm = model_form(Driver, db_session=db.session) 
form = MyForm(request.form, driver) 
相关问题