首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Flask-AppBuilder使用自定义表单更改选择字段的默认选择?

如何通过Flask-AppBuilder使用自定义表单更改选择字段的默认选择?
EN

Stack Overflow用户
提问于 2018-06-28 04:40:17
回答 1查看 477关注 0票数 1

将我的Flask应用程序更改为Flask-Appbuilder,并遇到一些问题。我希望使用url中的参数更改SelectField的默认选择,有点像自动表单所做的那样。在下面的配置中,当第三个建筑物被选中时,我在URL中得到“/rooms/add?_flt__ third =3”。如何让WTForm中的building_id在页面上选择他的?

房间形式:

代码语言:javascript
复制
class RoomForm(DynamicForm):
  building_list = db.session.query(Building).all()
  name = StringField('Room name', validators=[DataRequired()])
  building_id = SelectField('Building', choices=[(r.id, r.name) for r in building_list], validators=[DataRequired()])
  floor_id = StringField('Floor', validators=[DataRequired()])

房间模型:

代码语言:javascript
复制
class Room(Model):
  id = Column(Integer, primary_key=True)
  name = Column(String(80), unique=True, nullable=False)
  building_id = Column(Integer, ForeignKey('building.id'), nullable=False)
  building = relationship("Building")
  floors_id = Column(Integer, ForeignKey('floors.id'), nullable=True)
  floor = relationship("Floors")
  node = relationship('Nodes', backref='roomkey', lazy='dynamic')
  device = relationship('Devices', backref='roomkey2', lazy='dynamic')

  def __repr__(self):
    return self.name

class Building(Model):
  id = Column(Integer, primary_key=True)
  name = Column(String(80), unique=True, nullable=False)
  floors = Column(Integer)
  gunitbuilding = relationship('Room', backref='buildingkey', lazy='dynamic')

  def __repr__(self):
    return self.name
    return self.id

房间视图:

代码语言:javascript
复制
class Rooms(ModelView):
  datamodel = SQLAInterface(Room)
  show_title = 'Rooms'
  add_title = 'Add room'
  edit_title = 'Edit room'
  list_title = 'Rooms'
  list_columns = ['name']
  show_fieldsets = [('Summary', {'fields':['name']} )]
  search_columns = ['name']
  add_columns = ['name','building_id','floor_id']
  add_form = RoomForm

class managerooms(MasterDetailView):
  datamodel = SQLAInterface(Building)
  list_title = 'Buildings'
  list_columns = ['name']
  related_views = [Rooms]
  show_title = 'Buildings'

appbuilder.add_view_no_menu(managerooms)
appbuilder.add_view_no_menu(Rooms)
appbuilder.add_link("Rooms", href="/managerooms/list/1?next=%2Fmanagerooms%2Flist%2F1", icon="", category="Manage")
EN

回答 1

Stack Overflow用户

发布于 2018-06-29 04:37:38

我想出了一个变通办法。如果有更好的方法,请告诉我。我将refresh()添加到RoomForm中,由于我不确定如何获得完整的url和参数字符串以外的任何内容,因此我减去前19个字符以获得正确的建筑物编号。

代码语言:javascript
复制
  def refresh():
    form = RoomForm()
    if request.method == 'GET':
      a=len(request.query_string)-19
      form.building_id.default = int(request.query_string[-a:])
      form.process()
    return form
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51071068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档