-1

FormAlchemy でカスケード セレクト ボックスを作成する方法がわかりません。住所選択フォームと同様に、次の 4 つのクラスがあります。

class Country(Base, DBBase):
    __tablename__ = 'countries'

    id = Column(Integer, primary_key = True)
    name = Column(String)

    def __init__(self, name):
        self.name = name


class Province(Base, DBBase):
    __tablename__ = 'provinces'

    id = Column(Integer, primary_key = True)
    country_id = Column(Integer, ForeignKey('countries.id'), nullable = True)
    country = relationship('Country', backref = 'provinces')
    name = Column(String)

    def __init__(self, country, name):
        self.country = country
        self.name = name


class City(Base, DBBase):
    __tablename__ = 'cities'

    id = Column(Integer, primary_key = True)
    province_id = Column(Integer, ForeignKey('provinces.id'), nullable = True)
    province = relationship('Province', backref = 'cities')
    name = Column(String)

    def __init__(self, province, name):
        self.province = province
        self.name = name


class District(Base, DBBase):
    __tablename__ = 'districts'

    id = Column(Integer, primary_key = True)
    city_id = Column(Integer, ForeignKey('cities.id'), nullable = True)
    city = relationship('City', backref = 'districts')
    name = Column(String)

    def __init__(self, city, name):
        self.city = city
        self.name = name

ユーザーが第 1 レベルの選択ボックス (ここでは国フィールド) からオプションを選択すると、第 2 レベルの選択ボックスには、対応する第 1 レベルの選択ボックスに属するものがすべてリストされます (「国」フィールドで米国を選択した場合は、「州/州」)。フィールドには、すべての州が米国に属していることを示す必要があります)。三段目と四段目の箱はこんな感じ。すべてのデータは、上記の 4 つのクラスのように並べ替えられます。問題は、FormAlchemy でそのようなフォームを作成する方法です。

4

1 に答える 1

1

ここでは、JavaScriptによって動的にロードされるフォームを作成するとします。本質的には、上のレベルが選択されるまで、レベル2から4は空であると言います。

ここでは実際にはフロントエンドの使用法によって異なりますが、フォーム全体をリロードするだけの簡単なソリューションを紹介します。これを簡単に変更して、より動的になり、より良いエクスペリエンスを実現できます。

あなたがしたいのは、上記のレベルがまだ選択されていない選択ボックスの中に何が入るかわからないフォームを作成することです。国(たとえば「US」)である第1レベルがあり、次に州(この場合は米国のすべての州)のリストを表示する第2レベルがあると仮定します。

これで、ユーザーには最初に国を選択するためのボックスのみが表示されます。

すべてのフィールド(つまり、すべてのレベル)を含めるようにフォームを作成しますが、最初のフィールドを除くすべてを空にします。次に、ユーザーが最初のレベルを選択します。フォームを送信しますが、第1レベルがあるため、第2レベルのデータを使用してフォームを作成できます(たとえば、モデルから米国のすべての州を取得します)。次に、これをFormAlchemyに渡します。次に、そのフォームをユーザーに送り返します。彼は2番目のレベルを選択し、モデルからリストを再度作成してフォームに渡します。これは、各レベルが構築されるまで続きます。

したがって、フォームには、所有しているすべてのフィールドが含まれますが、最初のフィールドを除いてすべて空です。フォームが送信されるたびに、どのレベルが存在するかを確認し、モデルからそれらを取得します。これがこのアプローチの本質です。これをFormAlchemyに実装するのは、フォームを作成するのと同じくらい簡単です。

:フォームを同じビューに何度も送信する必要があり、データが毎回完了しているかどうかを確認する必要があります。

質問は一般的なアプローチを目的としており、特別なFormAlchemy構文を目的としていないため、ここでは例を示しません。

于 2012-09-25T11:20:41.523 に答える