pyramid_formalchemyでカスタムフォームを作成する際に問題が発生しています。私はパッケージにバグがあり、私が何かを逃していないことを確認したいと思っています。私のセットアップは次のようになります。カスタムpyramid_formalchemyフォーム
def includeme(config):
config.include('pyramid_formalchemy')
# Adding the jquery libraries
config.include('fa.jquery')
# Adding the package specific routes
config.include('myapp.web.formalchemy.faroutes')
config.formalchemy_admin('admin',
models=[User],
forms=faforms,
session_factory=session,
view='fa.jquery.pyramid.ModelView',
factory='myapp.model.RootFactory')
config.formalchemy_model('user',
model='myapp.model.user.User',
session_factory=session,
view='fa.jquery.pyramid.ModelView',
factory='myapp.model.RootFactory')
faforms私のカスタムフォームを含むモジュールです:
from myapp.model.user import User
from formalchemy import FieldSet
from formalchemy import Grid
class UserFieldSet(FieldSet):
def __init__(self):
FieldSet.__init__(self, User)
self.configure()
class UserGrid(Grid):
def __init__(self):
Grid.__init__(self, User)
self.configure()
私は正常に動作formalchemy、上記の2つのクラスをコメントアウトした場合。ユーザーを表示でき、ユーザーを編集することができます。
2つのクラスを配置すると、問題が発生します。問題はpyramid_formalchemyがモジュールの名前空間からUserGridとUserFieldSetを取得し、インスタンス化されたクラスであるかのようにそれらを使用しようとします。これは物事を壊す。一方、pyramid_formalchemyがクラスを見つけられない場合は、クラスを動的に作成してインスタンス化します。私は、ライン236はget_grid()関数で始まる、問題のあるコードがpyramid_formalchemy/views.pyであると信じて:
def get_grid(self):
"""return a Grid object"""
request = self.request
model_name = request.model_name
form_name = '%sGrid' % model_name
if hasattr(request.forms, form_name):
g = getattr(request.forms, form_name) <-- g is a class type not an
g.engine = g.engine or self.engine <-- instance!
g.readonly = True <-- why is it not instantiated?
g._request = self.request
self.update_grid(g)
return g
model = self.context.get_model() <-- UserGrid not found in faforms
grid = self.grid_class(model) <-- module.
grid.engine = self.engine <-- so a Grid is instantiated
if not isinstance(request.forms, list):
# add default grid to form module eg: caching
setattr(request.forms, form_name, grid)
grid = grid.copy()
grid._request = self.request
self.update_grid(grid)
return grid
ここでマッチンググリッド(またはフィールドセット)は、それがインスタンス化される見つからない場合は、あなたが見ることができます、それが見つかった場合、クラス型は直接使用されますが、実際にはインスタンス化されません。
ここにはどんな考えがありますか?私は間違って何かを設定していますか?
基本的にCSRFトークンを使用していますので、セッションからトークンを取得するためにフォームをカスタマイズする必要があります。
ありがとうございました。
なぜこれがstackoverflowですか?それは、https://github.com/FormAlchemy/pyramid_formalchemy/issuesに属するバグレポートのように表現されています。 –
私は「質問」をよりよく表現するべきだったと思います。私はgithubにバグかもしれないものを投稿する前に、物事を正しく設定していることを確認したい。 – lostdorje