pallets-eco / flask-admin

Simple and extensible administrative interface framework for Flask
https://flask-admin.readthedocs.io
BSD 3-Clause "New" or "Revised" License
5.76k stars 1.57k forks source link

Convert Model to form fails for _Label object. #99

Closed pearkes closed 11 years ago

pearkes commented 11 years ago

Here's the column that breaks the conversion:

users = db.column_property(select([func.count(User.home_name)], whereclause=(User.home_name == name)))

And the traceback:

Traceback (most recent call last):
  File "app.py", line 1, in <module>
    from shared.bootstrap import app
  File "/home/vagrant/site/shared/bootstrap.py", line 16, in <module>
    import web.admin
  File "/home/vagrant/site/web/admin.py", line 52, in <module>
    home_view = CustomHomeView(db.session)
  File "/home/vagrant/site/web/admin.py", line 47, in __init__
    super(CustomHomeView, self).__init__(Home, session, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/contrib/sqlamodel/view.py", line 177, in __init__
    super(ModelView, self).__init__(model, name, category, endpoint, url)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 255, in __init__
    self._refresh_cache()
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 267, in _refresh_cache
    self._create_form_class = self.get_create_form()
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 452, in get_create_form
    return self.get_form()
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/model/base.py", line 444, in get_form
    return self.scaffold_form()
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/contrib/sqlamodel/view.py", line 400, in scaffold_form
    field_args=self.form_args)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/contrib/sqlamodel/form.py", line 276, in get_form
    field = converter.convert(model, mapper, prop, field_args.get(name), hidden_pk)
  File "/usr/local/lib/python2.7/dist-packages/flask_admin/contrib/sqlamodel/form.py", line 121, in convert
    if column.unique and not unique:
AttributeError: '_Label' object has no attribute 'unique'
exited with code 1
sending SIGTERM to all processes

I've tried ignoring the problem column with the list_columns method, but that still caused it to fail.

mrjoes commented 11 years ago

I see. It happens because form generation logic sees model property, but it is not bound to the column.

I will add check to prevent this kind of error.