2

This is the error:

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'

This is my view.py method

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)

and this is my template for form:

{% 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 %}

I am getting an error related to following code

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

and:

{{ field() }}

please suggest some solution. Thanks in advance.

1
  • Have you manged to slove this? Commented Mar 24, 2015 at 15:35

1 Answer 1

5

I will post my solution even it's not perfect.

After struggling with this, I figure out that when db_session trying to query from the db, it's fails when the foreign_model is not he model I'm editing, it's actually a relationships I have.

SOLVED BY

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

In my model, I had to exclude all the relationships. It works fine, I still have no idea how to edit them, but in my situations I didn't have to.

UPDATE

I managed to solve it by passing my session and not the Form like this:

MyForm = model_form(Driver, db_session=db.session)
form = MyForm(request.form, driver)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.