将记录集从控制器Odoo传递到模板中的对象

将记录集从控制器Odoo传递到模板中的对象,odoo,odoo-10,odoo-9,qweb,odoo-view,Odoo,Odoo 10,Odoo 9,Qweb,Odoo View,我在奥多网站上有一个表格,上面有国家和州的选择字段。这个表单是从一个控制器填充的,我在其中传递一个记录集,其中所有的州和国家都作为dict中的值,州和国家作为键。现在对于selection字段,它使用t-foreach循环通过states来提供选项和值。现在在选择国家后,我需要能够过滤出该特定国家的州。这可能吗?如果可能,如何实现?以下是我尝试过的一些代码: 以下是最初加载表单的控制器,第二种方法是过滤出状态 @http.route('/admission\u applications',typ

我在奥多网站上有一个表格,上面有国家和州的选择字段。这个表单是从一个控制器填充的,我在其中传递一个记录集,其中所有的州和国家都作为dict中的值,州和国家作为键。现在对于selection字段,它使用t-foreach循环通过states来提供选项和值。现在在选择国家后,我需要能够过滤出该特定国家的州。这可能吗?如果可能,如何实现?以下是我尝试过的一些代码: 以下是最初加载表单的控制器,第二种方法是过滤出状态

@http.route('/admission\u applications',type='http',auth=“public”,website=True)
def申请表(自我):
cr,uid,context,registry=request.cr,request.uid,request.context,request.registry
班级=[('lkg','lkg','ukg','ukg','1','2','3','3','4','4','5','5','6','7','8','9','9','10','10','11','11','11','12','12']
性别=[(‘男性’,‘男性’,(‘女性’,‘女性’)]
orm_country=http.request.env['res.country']
state_orm=http.request.env['res.country.state']
countries=orm_country.search([])
#countries=orm\u country.browse(cr、超级用户ID、国家ID、上下文)
状态=状态形式搜索([])
#states=state\u orm.browse(cr、超级用户ID、states\u ID、上下文)
return request.render(“网站入学申请表,{'classes':班级,'gender':性别,'countries':国家,'states':州})
@http.route('/action\u get\u states/',type='http',auth='public',website=True)
def状态列表(自身、国家/地区id):
州信息=[]
日志记录错误(国家/地区id)
states=http.request.env['res.country.state'].search([('country\u id.id','=',country\u id)])
对于州中的州:
states_info.append({'id':state.id,'name':state.name})
记录错误(状态信息)
返回状态信息
接下来是与模板相关的代码:


国家
国家。。。
陈述
国家。。。
js调用controller方法以过滤状态如下:

function countryselection() {
    alert("hai");
    var country = document.getElementById('country_id').value;
    alert(country);
    $.ajax({
        type: "GET",
        url: "/action_get_states/"+country,
        success: function(data) {
            $("states").html(data);
        }
    });     
}
我知道这不是正确的方法,但我不确定如何将记录集返回到我最初使用表单加载的状态。

//这只是我在Odoo网站上使用的一个示例。
//This is just an example which I used on Odoo website.
// Just make your proper changes by changing field names.    
$(document).ready(function () {

        $('select[name=country_id]').change(function () {
        $('#state_id option').remove();
        var states = new Model('res.country.state').call('search_read',[[['country_id', '=', parseInt($('select[name=country_id]').val())]]]).then(function(result){
        for (var i=0; i<result.length; i++){
            $('#state_id').append($('<option>',
                 {
                    value: result[i].id,
                    text : result[i].name
                 }));
        }
        })

        });
//只需通过更改字段名进行适当的更改。 $(文档).ready(函数(){ $('select[name=country\u id]')。更改(函数(){ $(“#state_id option”).remove(); var states=new Model('res.country.state')。调用('search_read'、[[['country_id'、'=',parseInt($('select[name=country_id]')).val())]])。然后调用(函数(result){
对于(var i=0;iHaven没有尝试上述方法,我在控制器中使用一个对新方法的ajax调用来处理它,并将状态作为带有id和名称的json数据返回。state_id的选项经过了调整,以便它们能够从控制器方法传递数据。话虽如此,我觉得您的方法似乎更干净。我稍后会尝试然后再打给你。谢谢你的回答!