emmett-framework / emmett

The web framework for inventors
BSD 3-Clause "New" or "Revised" License
1.06k stars 71 forks source link

bug in form with model including list:reference #192

Closed josejachuf closed 7 years ago

josejachuf commented 7 years ago

@gi0baro, Given this model:

class Foo(Model):
    name = Field()

class Bar(Model):
    name = Field()
    foo = Field('list:reference foos')

We insert some values to Foo.

If we create the form the error occurs:

form = Bar.form()

File "venv36/lib/python3.6/site-packages/pydal/objects.py", line 1403, in belongs value = set(value) TypeError: 'int' object is not iterable

Jose

gi0baro commented 7 years ago

@josejachuf do you have a complete traceback? On which adapter are you experiencing this?

josejachuf commented 7 years ago
Traceback (most recent call last):
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/wsgi.py", line 95, in error_handler
    return app.common_static_handler(app, environ, start_response)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/wsgi.py", line 68, in static_handler
    return dynamic_handler(app, environ, start_response)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/wsgi.py", line 31, in dynamic_handler
    app.route.dispatch()
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/expose.py", line 265, in dispatch
    route.f(**reqargs)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/pipeline.py", line 26, in pipe_flow
    output = link.pipe.pipe(link.f, **kwargs)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/expose.py", line 434, in pipe
    self.route.template_path, self.route.template, output)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/templating/core.py", line 168, in render
    return self._render(tsource, tpath, tname, context)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/templating/core.py", line 161, in _render
    make_traceback(exc_info, template_ref)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/debug.py", line 262, in make_traceback
    reraise(exc_type, exc_value, tb)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/_compat.py", line 93, in reraise
    raise value.with_traceback(tb)
  File "/usr/home/jose/trabajos/etiquetado-env/etiquetado/aplicacion/templates/edificios/formulario.html", line 53, in <module>
    {{=form}}
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/templating/core.py", line 54, in write
    body = self._to_native(self._to_html(self._to_unicode(data)))
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/templating/core.py", line 42, in _to_unicode
    return text_type(data)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/html.py", line 142, in __str__
    return self.__html__()
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 209, in __html__
    return self._render().__html__()
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 159, in _render
    styler._proc_element(field, value, error)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 490, in _proc_element
    widget, wfield = self._get_widget(field, value)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 476, in _get_widget
    self.attr, field, value, _id=widget_id)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 386, in widget_select
    options, multiple = FormStyle._field_options(field)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 328, in _field_options
    option_items = [(k, represent(n)) for k, n in validator.options()]
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 328, in <listcomp>
    option_items = [(k, represent(n)) for k, n in validator.options()]
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/weppy/forms.py", line 322, in represent
    return field.represent(value)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/pydal/helpers/methods.py", line 303, in __call__
    refs = db(id.belongs(value)).select(id)
  File "/usr/home/jose/trabajos/etiquetado-env/venv36/lib/python3.6/site-packages/pydal/objects.py", line 1403, in belongs
    value = set(value)
TypeError: 'int' object is not iterable
josejachuf commented 7 years ago

I am use sqlite3