-1

我不知道如何在 FormAlchemy 中制作级联选择框。像地址选择表一样,我们有四个类:

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

当用户从第一级选择框(这里是国家字段)中选择一个选项时,第二级选择框应该列出属于相应第一级选择框的所有内容(如果您在“国家”字段中选择美国,“省/州”字段应显示所有州属于美国)。三级和四级盒子就是这样。所有数据都像上面的四个类一样排序。问题是如何在 FormAlchemy 中制作这样的表格?

4

1 回答 1

1

我将在这里假设您想要构建一个由 JavaScript 动态加载的表单。从本质上讲,您说第二到第四层是空的,直到选择了上面的层。

它实际上取决于这里的前端使用情况,但我将提出一个简单的解决方案,它只会重新加载整个表单。您可以轻松地将其修改为更具动态性以获得更好的体验。

您想要做的是构建一个表单,您不知道那些尚未选择上述级别的选择框内将包含什么。假设您有一个国家/地区(例如“美国”)的第一级,然后有一个显示省份列表的第二级(在这种情况下是美国的所有州)。

现在您的用户应该只看到一个首先选择国家的框。

构建您的表单以包含所有字段(即所有级别),但将除第一个之外的所有字段都设为空。然后用户选择第一级。提交表单,但现在因为您有第一级,您可以使用第二级的数据构建表单(例如,从您的模型中获取美国的所有州)。然后将其传递给 FormAlchemy。然后将该表单发回给用户。他选择了第二个级别,然后您再次从模型中构建列表并将其传递给表单。这种情况一直持续下去,直到每个级别都建立起来。

因此,您的表单包括您拥有的所有字段,但它们都是空的,但第一个。每次提交表单时,您都会检查存在哪些级别并从模型中检索这些级别。这就是这种方法的精髓。在 FormAlchemy 中实现这一点就像构建任何表单一样简单。

注意:您需要一次又一次地将表单提交到同一个视图,并且每次都需要检查数据是否完整。

我不会在这里举个例子,因为问题是针对一般方法而不是一些特殊的 FormAlchemy 语法。

于 2012-09-25T11:20:41.523 回答