问题
I'm working on Odoo 8. I have a view that contains a set of combo-box type fields and a selection field. I want to make a test on the combo-box fields and if there are all checked then the selection field value should change. Here is what i have so far:
def get_etat_dossier(self,cr,uid,ids,args,fields,context=None):
res = {}
for rec in self.browse(cr,uid,ids):
if rec.casier_judiciare==True: # test field if = true
res[rec.id]= 02 # field etat_dos type selection = Dossier Complet
else:
res[rec.id] = 01
return res
_columns= {
'casier_judiciare' : fields.boolean('Casier Judiciaire'), # field to test
'reference_pro' : fields.boolean('Réferences Professionnelles'),
'certificat_qual' : fields.boolean('Certificat de qualification'),
'extrait_role' : fields.boolean('Extrait de Role'),
'statut_entre' : fields.selection([('eurl','EURL'),('sarl','SARL')],'Statut Entreprise'),
'etat_dos': fields.selection([('complet','Dossier Complet'),('manquant','Dossier Manquant')],'Etat De Dossier'), # field ho change after test
}
Here is the code for my view
<group col='4' name="doss_grp" string="Dossier de Soumission" colspan="4" > <field name="casier_judiciare"/>
<field name="certificat_qual"/>
<field name="extrait_role"/>
<field name="reference_pro"/>
<field name="statut_entre" style="width:20%%"/>
<field name="etat_dos"/>
</group>
回答1:
Add an onchange
attribute to the casier_judiciare
field and then pass all the other fields you want to check as arguments to the method like this
<group col='4' name="doss_grp" string="Dossier de Soumission" colspan="4" >
<field name="casier_judiciare" on_change="onchange_casier_judiciare(casier_judiciare, certificat_qual, extrait_role, reference_pro)"/>
<field name="certificat_qual"/>
<field name="extrait_role"/>
<field name="reference_pro"/>
<field name="statut_entre" style="width:20%%"/>
<field name="etat_dos"/>
</group>
In your model file define the method like this and use an if statement to check if they're all True (That means they have all been checked), if so then you can return a dictionary with any value you want for the selection field, in this case etat_dos
will change to Dossier Complet
def onchange_casier_judiciare(self, cr, uid, ids, casier_judiciare, certificat_qual, extrait_role, reference_pro, context=None):
if casier_judiciare and certificat_qual and extrait_role and reference_pro: # if they're all True (that means they're all checked):
values = {'value': {'etat_dos': 'complet'}} #set the value of etat_dos field
return values
Note that the onchange
is only triggered on the casier_judiciare
field but you can also set onchange
on other fields and it should work just fine
来源:https://stackoverflow.com/questions/37083117/how-to-change-selection-field-automatically-in-odoo