Filter Flask Admin:如何根据前一个字段中输入的值筛选字段的可选数据,并在另一个表中使用搜索条件

Filter Flask Admin:如何根据前一个字段中输入的值筛选字段的可选数据,并在另一个表中使用搜索条件,filter,field,relationship,flask-admin,Filter,Field,Relationship,Flask Admin,在flask admin model视图中,我想根据在上一个字段中输入的值,过滤作为关系字段的edit/create视图中的下拉菜单。 在特定情况下,我只希望看到“posto”中显示在属于所选“categoria”的另一个表中的那些 类标记(db.Model): __tablename_uu='tags' nr_标记=db.Column(db.Integer,主键=True) categoria_id=db.Column(db.Integer,db.ForeignKey('categorie.i

在flask admin model视图中,我想根据在上一个字段中输入的值,过滤作为关系字段的edit/create视图中的下拉菜单。 在特定情况下,我只希望看到“posto”中显示在属于所选“categoria”的另一个表中的那些

类标记(db.Model):
__tablename_uu='tags'
nr_标记=db.Column(db.Integer,主键=True)
categoria_id=db.Column(db.Integer,db.ForeignKey('categorie.id'),nullable=False)
categoria=db.relationship('categoria',backref='tags')
posto_id=db.Column(db.Integer,db.ForeignKey('stalli.id'),nullable=False)
posto=db.relationship('Stallo',backref='tags')
cognome=db.Column(db.String(30),nullable=False)
nome=db.Column(db.String(30))
auto=db.Column(db.String(20))
targa=db.Column(db.String(10))
recapito=db.Column(db.String(80))
stato=db.Column(db.Integer)
posto_occ=db.Column(db.Integer)
orario=db.Column(db.Integer)
fuoriposto=db.Column(db.String(10))
parcheggio=db.Column(db.String(40))
类TagsAdmin(sqla.ModelView):
can_edit=True
能创建=真吗
列列表=['nr_标记','categoria','posto','cognome','targa',
“stato”、“orario”、“fuoriposto”、“parcheggio”]
can\u view\u details=True
详细信息\u模态=真
form_columns=['nr_TAG'、'categoria'、'posto'、'cognome'、'nome'、'auto'、'targa'、'recapito']
有什么想法吗?
谢谢

我想出了以下解决方案,也许它并不完美,但它确实起到了作用:

master.html

函数populateSelectField(要填充,请选择选项){
$(“#s2id”+to_populate+'>a>span')。文本(“”);
var el=$('select[name$=“+”以填充+'”);
el.children().remove();
选项='';
el.追加($(选项));
options.forEach(函数(行){
var option_id=row.id,
选项_title=row.title;
如果(选择和选项\u id==选择){
选项=“”+选项标题+“”;
$(“#s2id”+to_populate+'>a>span')。文本(选项标题);
}否则{
选项=“”+选项标题+“”;
}
el.追加($(选项));
});
}
函数getOptions(el、填充、url、选择){
var item_id=el.val(),
url=window.location.origin+url+item_id+'/';
$.get(url).done(函数(选项){
populateSelectField(要填充,请选择选项);
}).失败(功能(错误){
控制台错误(错误消息);
返回false;
});
}
函数selectFieldManipulation(从\u填充,到\u填充,url){
var main_select=$('select[name$='+from_populate+'''']'),
要填充,请选择“[name$=”+要填充+”]”;
getOptions(main_select、to_populate、url、to_populate_el.val());
主选择更改(功能(e){
getOptions(主选项、填充选项、url选项、空选项);
});

}
我提出了以下解决方案,也许它并不完美,但它确实起到了作用:

master.html

函数populateSelectField(要填充,请选择选项){
$(“#s2id”+to_populate+'>a>span')。文本(“”);
var el=$('select[name$=“+”以填充+'”);
el.children().remove();
选项='';
el.追加($(选项));
options.forEach(函数(行){
var option_id=row.id,
选项_title=row.title;
如果(选择和选项\u id==选择){
选项=“”+选项标题+“”;
$(“#s2id”+to_populate+'>a>span')。文本(选项标题);
}否则{
选项=“”+选项标题+“”;
}
el.追加($(选项));
});
}
函数getOptions(el、填充、url、选择){
var item_id=el.val(),
url=window.location.origin+url+item_id+'/';
$.get(url).done(函数(选项){
populateSelectField(要填充,请选择选项);
}).失败(功能(错误){
控制台错误(错误消息);
返回false;
});
}
函数selectFieldManipulation(从\u填充,到\u填充,url){
var main_select=$('select[name$='+from_populate+'''']'),
要填充,请选择“[name$=”+要填充+”]”;
getOptions(main_select、to_populate、url、to_populate_el.val());
主选择更改(功能(e){
getOptions(主选项、填充选项、url选项、空选项);
});

}
我认为您需要加载下拉菜单中的所有值,并使用Javascript根据用户输入值过滤这些值。您有这样的例子吗?事实上,我认为这是一个好主意。我认为您需要加载下拉菜单中的所有值,并使用Javascript根据用户输入值过滤这些值。您有这样的例子吗?事实上,我认为这是个好主意