Camelot的文档说它使用Elixir模型。由于 SQLAlchemy 已经包含 declarative_base 有一段时间了,所以我在另一个应用程序中使用它而不是 Elixir。现在我想直接在 Camelot 中使用 SQLAlchemy/声明性模型。
Stackoverflow 上有一篇文章说 Camelot与 Elixir无关,并且可以使用不同的模型,但没有说明如何。
Camelot的原版model.py
只有这样的内容:
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
我添加了我的 SQLAlchemy 模型并更改model.py
为:
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)
它没有用。当我开始时main.py
,我可以看到 GUI 和Test
边栏中,但看不到任何行。这是回溯的尾部:
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'
这是第elixir_admin.py
46-52 行的代码:
@model_function
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
如果此代码导致问题,我如何覆盖更改默认查询以使其工作的方法?
如何在 Camelot 中使用 SQLAlchemy/声明性模型?