Is Python Camelot tied to Elixir?
The docs for Camelot say it uses Elixir . Since SQLAlchemy included declarative_base for a while, I used that instead of Elixir for another application. Now I would like to use SQLAlchemy / declarative models directly in Camelot.
There is a post on Stackoverflow that says Camelot is not tied to Elixir and that different models would be possible, but that doesn't mean, tell me how.
only has this content:
import camelot.types from camelot.model import metadata, Entity, Field, ManyToOne, OneToMany, Unicode, Date, Integer, using_options from camelot.view.elixir_admin import EntityAdmin from camelot.view.forms import * __metadata__ = metadata
I added my SQLAlchemy model and changed
import camelot.types from camelot.model import metadata, Entity, Field, ManyToOne, OneToMany, Unicode, Date, using_options from camelot.view.elixir_admin import EntityAdmin from camelot.view.forms import * from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() __metadata__ = metadata Base = declarative_base() class Test(Base): __tablename__ = "test" id = Column(Integer, primary_key=True) text = Column(String)
It didn't work. When I start
, I can see the GUI and
the sidebar, but I can't see any lines. This is the tail of the trace:
File "/usr/lib/python2.6/dist-packages/camelot/view/elixir_admin.py", line 52, in get_query return self.entity.query AttributeError: type object 'Test' has no attribute 'query'
This is the code
for line 46-52:
def get_query(self): """:return: an sqlalchemy query for all the objects that should be displayed in the table or the selection view. Overwrite this method to change the default query, which selects all rows in the database. """ return self.entity.query
If this code is causing the problem, how do I rewrite the method to change the default query to make it work?
How can you use SQLAlchemy / declarative models in Camelot?
source to share
Here is some sample code for using a Declarative to define a movie model for Camelot, some explanation can be found here .
import sqlalchemy.types from sqlalchemy import Column from sqlalchemy.ext.declarative import ( declarative_base, _declarative_constructor ) from camelot.admin.entity_admin import EntityAdmin from camelot.model import metadata import camelot.types from elixir import session class Entity( object ): def __init__( self, **kwargs ): _declarative_constructor( self, **kwargs ) session.add( self ) Entity = declarative_base( cls = Entity, metadata = metadata, constructor = None ) class Movie( Entity ): __tablename__ = 'movie' id = Column( sqlalchemy.types.Integer, primary_key = True ) name = Column( sqlalchemy.types.Unicode(50), nullable = False ) cover = Column( camelot.types.Image(), nullable = True ) class Admin( EntityAdmin ): list_display = ['name'] form_display = ['name', 'cover']
source to share