mirror of
https://github.com/wassname/pyramid_formalchemy.git
synced 2026-06-27 16:10:40 +08:00
fix xhr field renderer
This commit is contained in:
@@ -8,6 +8,7 @@ develop = . pyramidapp ../fa.jquery ../formalchemy
|
||||
recipe = zc.recipe.egg
|
||||
eggs =
|
||||
pyramid_formalchemy
|
||||
pyramid_handlers
|
||||
pyramidapp
|
||||
fa.jquery
|
||||
WebTest
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pyramid.exceptions import NotFound
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@@ -18,22 +19,32 @@ class Base(object):
|
||||
request.model_class = None
|
||||
request.model_name = None
|
||||
request.model_id = None
|
||||
request.relation = None
|
||||
request.format = 'html'
|
||||
|
||||
def get_model(self):
|
||||
request = self.request
|
||||
if request.model_class:
|
||||
return request.model_class
|
||||
if request.model_name:
|
||||
if isinstance(request.model, list):
|
||||
for model in request.model:
|
||||
if model.__name__ == request.model_name:
|
||||
request.model_class = model
|
||||
return request.model_class
|
||||
elif hasattr(request.model, request.model_name):
|
||||
request.model_class = getattr(request.model, request.model_name)
|
||||
return request.model_class
|
||||
raise NotFound()
|
||||
model_name = request.model_name
|
||||
model_class = None
|
||||
if isinstance(request.model, list):
|
||||
for model in request.model:
|
||||
if model.__name__ == model_name:
|
||||
model_class = model
|
||||
break
|
||||
elif hasattr(request.model, model_name):
|
||||
model_class = getattr(request.model, model_name)
|
||||
if model_class is None:
|
||||
raise NotFound()
|
||||
request.model_class = model_class
|
||||
return model_class
|
||||
|
||||
def get_instance(self):
|
||||
model = self.get_model()
|
||||
session = self.request.session_factory()
|
||||
return session.query(model).get(self.request.model_id)
|
||||
|
||||
|
||||
|
||||
class Models(Base):
|
||||
|
||||
@@ -112,13 +112,13 @@ class ModelView(object):
|
||||
request = self.request
|
||||
model_name = request.model_name
|
||||
id = request.model_id
|
||||
items.append((request.fa_url(), 'root'))
|
||||
items.append((request.fa_url(), 'root', 'root_url'))
|
||||
if self.model_name:
|
||||
items.append((request.fa_url(model_name), model_name))
|
||||
items.append((request.fa_url(model_name), model_name, 'model_url'))
|
||||
if id and hasattr(fs.model, '__unicode__'):
|
||||
items.append((request.fa_url(model_name, id), u'%s' % fs.model))
|
||||
items.append((request.fa_url(model_name, id), u'%s' % self.context.get_instance(), 'instance_url'))
|
||||
elif id:
|
||||
items.append((request.fa_url(model_name, id), id))
|
||||
items.append((request.fa_url(model_name, id), id, 'instance_url'))
|
||||
return items
|
||||
|
||||
def render(self, **kwargs):
|
||||
@@ -166,7 +166,7 @@ class ModelView(object):
|
||||
fields = fs.render_fields
|
||||
if field_name in fields:
|
||||
field = fields[field_name]
|
||||
return field.render()
|
||||
return Response(field.render())
|
||||
else:
|
||||
raise NotFound()
|
||||
return Response(fs.render())
|
||||
@@ -238,7 +238,7 @@ class ModelView(object):
|
||||
del fs[field.name]
|
||||
return fs
|
||||
|
||||
def get_grid(self):
|
||||
def get_grid(self, model_name=None):
|
||||
"""return a Grid object
|
||||
|
||||
Default is::
|
||||
@@ -249,14 +249,15 @@ class ModelView(object):
|
||||
return grid
|
||||
"""
|
||||
request = self.request
|
||||
model_name = self.model_name
|
||||
model_name = model_name or self.model_name
|
||||
if request.forms and hasattr(request.forms, '%sGrid' % model_name):
|
||||
g = getattr(request.forms, '%sGrid' % model_name)
|
||||
g.engine = g.engine or self.engine
|
||||
g.readonly = True
|
||||
self.update_grid(g)
|
||||
return g
|
||||
grid = self.Grid(self.context.get_model())
|
||||
model = self.context.get_model()
|
||||
grid = self.Grid(model)
|
||||
grid.engine = self.engine
|
||||
self.update_grid(grid)
|
||||
return grid
|
||||
@@ -287,7 +288,7 @@ class ModelView(object):
|
||||
|
||||
def listing(self, **kwargs):
|
||||
"""listing page"""
|
||||
page = self.get_page()
|
||||
page = self.get_page(**kwargs)
|
||||
fs = self.get_grid()
|
||||
fs = fs.bind(instances=page)
|
||||
fs.readonly = True
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import transaction
|
||||
|
||||
from sqlalchemy import Table
|
||||
from sqlalchemy import Column
|
||||
from sqlalchemy import Integer
|
||||
from sqlalchemy import Unicode
|
||||
from sqlalchemy import ForeignKey
|
||||
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import relation
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
from sqlalchemy.orm import scoped_session
|
||||
@@ -37,6 +40,38 @@ class Bar(Base):
|
||||
id = Column(Integer, primary_key=True)
|
||||
foo = Column(Unicode(255))
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = 'users'
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Unicode)
|
||||
group_id = Column(Integer, ForeignKey('groups.id'))
|
||||
group = relation("Group", backref='users')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
group_permissions = Table('group_permissions', Base.metadata,
|
||||
Column('permission_id', Integer, ForeignKey('permissions.id')),
|
||||
Column('group_id', Integer, ForeignKey('groups.id')),
|
||||
)
|
||||
|
||||
class Group(Base):
|
||||
__tablename__ = 'groups'
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Unicode)
|
||||
permissions = relation("Permission", secondary=group_permissions, backref="groups")
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
class Permission(Base):
|
||||
__tablename__ = 'permissions'
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(Unicode)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
def populate():
|
||||
session = DBSession()
|
||||
model = MyModel(name=u'root',value=55)
|
||||
@@ -46,8 +81,11 @@ def populate():
|
||||
model = MyModel(name=u'root%i' % i,value=i)
|
||||
session.add(model)
|
||||
session.flush()
|
||||
g = Group()
|
||||
g.id = 1
|
||||
g.name = 'group1'
|
||||
transaction.commit()
|
||||
|
||||
|
||||
def initialize_sql(engine):
|
||||
DBSession.configure(bind=engine)
|
||||
Base.metadata.bind = engine
|
||||
|
||||
Reference in New Issue
Block a user