Comments (7)
I think I have a generic-enough solution, and it seems to be working. I still need to refine it and find out how to unit test it, and I need a bit more time for that.
from sqladmin.
I'm hitting the same issue as well. As far as I can tell, the model data
attributes overrides the wtforms.form.Baseform.data
property. I haven't (yet) taken the time to see whether I can somehow circumvent this issue or not.
from sqladmin.
Looking into the wtforms
repo, I found this open issue: wtforms/wtforms#791, which points back to the sqladmin
repo in the end.
from sqladmin.
I've been able to circumvent this issue by:
- renaming the
data
sqlalchemy column todata_
while still providing adata
hybrid property on the model to hide the renaming - map the
data_
column name to adata
sqladmin column label
# models.py
+class DataPropertyMixin:
+ """Provide the .data property as an accessor to the data_ mapped column"""
+
+ @hybrid_property
+ def data(self):
+ return self.data_
+
+ @data.inplace.setter
+ def set_data(self, value):
+ self.data_ = value
+
+
-class Item(NameReprMixin, BaseModel):
+class Item(NameReprMixin, DataPropertyMixin, BaseModel):
name: Mapped[str] = mapped_column(String(255), unique=True, index=True)
- data: Mapped[str] = mapped_column(Json, name="json_data")
+ data_: Mapped[str] = mapped_column(Json, name="json_data")
# admin.py
class ItemAdmin(CustomModelView, model=Item):
- column_labels = {"five_e_tools_url": "5e.tools URL"}
+ column_labels = {"five_e_tools_url": "5e.tools URL", Item.data_: "data"}
It's not ideal, as we'd have to repeat the process for any name collision that we get with wtforms.form.BaseForm
but it works.
from sqladmin.
I'm open to add a condition for this specific column name (data) and have a proper comment to rename it to something else in wtforms to handle this. PRs are welcome.
from sqladmin.
I'm happy to give it a go when I can.
I was thinking of adapting https://github.com/aminalaee/sqladmin/blob/main/sqladmin/forms.py#L619-L634 so that, for model columns specifically named data
, we'd map them to Field
objects named _data
with an attribute name=data
, as hinted at in wtforms/wtforms#791 (comment).
So we'd get field_dict['_data'] = Field(name='data', ...)
.
Was that what you had in mind?
from sqladmin.
Yeah and also here when we get the form data:
sqladmin/sqladmin/application.py
Line 660 in f62c38a
We should reverse that logic.
from sqladmin.
Related Issues (20)
- Static file over https in AWS with ECS and LoadBalancer HOT 16
- CSS and Javascript files for the Admin not loaded HOT 2
- Overriden form text field with FileUpload field. HOT 7
- Not able to edit fields in sql admin when using s3 filetype HOT 3
- Unexpected main page view HOT 6
- Add ModelView.form_query property to create form-filtering feature HOT 2
- override delete model method to perform soft delete HOT 1
- form_overrides doesn't work HOT 2
- SqlAlchemy dataclass support missing HOT 6
- Multiple Admin Instances result in wrong URL's to the views HOT 1
- Ajax query passes incorrect urn when admin mounted on sub fastapi app HOT 3
- Sort symbol is incorrect (wrong direction)
- sqladmin + jinja templates conflict index.html HOT 3
- Raised value error HOT 5
- Define default values via form_args
- TypeError: UUID objects are immutable (fastapi_users) HOT 4
- ValueError on passing unexcepted parameter
- Use HTMX HOT 3
- jinja2.exceptions.TemplateNotFound: list.html HOT 3
- What about Router per View? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sqladmin.