2016-03-21 9 views
0

Ich bin ein Neuling für Python und odoo. Ich entwickle ein benutzerdefiniertes Modul, um eine Schüleranwendung für eine Schule zu implementieren. Mein Hauptziel ist es, Bewerbungsdaten zu sammeln. Ich habe 3 Modelle dafür.Wie verwendet man ein verwandtes Feld, um ein Attribut eines many2one-Objekts zu setzen?

class ApApplicationsModel(models.Model): 
    _name = 'ap.applications.model'  

class ApPrevSchoolModel(models.Model):  
    _name = 'ap.prevschool.model' 

class ApPersonModel(models.Model):  
    _name = 'ap.person.model' 
    _inherit = 'op.student' 

ApPersonModel wird verwendet, um die Details der Schüler, Eltern und Erziehungsberechtigten zu speichern. Zu diesem Zweck habe ich eine unsichtbare Auswahl ap_persontype

3 many2one Links in der

ap_father_id = fields.Many2one('ap.person.model','Father Details', readonly=False,related='ap_prevschool_model.ap_name', store=True) 

ap_mother_id = fields.Many2one('ap.person.model','Mother Details', readonly=False) 

ap_student_id = fields.Many2one('ap.person.model','Student Details') 

definiert wurden Attribut habe ich ein Feld

ap_persontype = fields.Selection(
     [('student','Student'),('parent','Parent'),('grd','Guardian')], 'Person Type',default='student', track_visibility='onchange') 

in ap.person.model

Ich möchte den Typ der Person auf "Student" oder "Eltern" oder "Wächter" festlegen, wenn die Formularansicht initiiert wird, um einige Felder ein- und auszublenden.

Wie mache ich das?

Es ist vielleicht keine gute Übung, so zu handeln. Wie erreiche ich es dann?

+0

meine erste Sorge ist, wie kann ich ap_persontype zu einem ‚Eltern‘ oder ‚grd‘ gesetzt, wenn das Formular geladen wird/initialisiert je nach many2one Objekt von der Aussicht konstruiert werden. Meine zweite Sorge betrifft das Aktivieren oder Deaktivieren von Feldern. Ich bemühe mich, den richtigen Weg zu finden, um meine erste Sorge anzugehen. – Mohammed

Antwort

0

Ich weiß nicht, was Sie genau erreichen wollen, aber ich denke, dass Sie einige Felder durch Bedingung von etwas (Art von Person in diesem Fall) verstecken oder zeigen möchten. Also, was Sie tun möchten, ist Attributwerte zu allen Feld zu machen, was Sie verstecken oder anzeigen möchten und dann wird es automatisch verstecken oder zeigen. mini Beispiel:

<field name="student_age" attrs="{'invisible': [('ap_persontype'),'not in',['parent','grd']]}"/> 

Ich hoffe, dass es Ihnen geholfen.

+0

Wie setze ich den ap_persontype dynamisch zu einem 'Schüler' oder 'Eltern' oder 'GRD'? Mein Verständnis war, dass wir die on_load Art der Funktion unterbrechen müssen. Wie schreibe ich eine on_load in odoo? – Mohammed

+0

Nein mohammed: D alles ist einfacher als du denkst. Alles funktioniert dynamisch. Wird der Wert von ap_persontype geändert, wird die Feldansicht automatisch geändert. Ich kann es nicht einfacher sagen ... –

1
  • Bitte nur ein Modul für diese Logik keine Notwendigkeit, mehrere Modelle zu verwenden und versuchen, diesen Code verwenden:
  • Wenn ap_persontype = Schüler dann unsichtbar andere Bereiche. Gleiche Logik für ein anderes Feld.
    Hier mein Code Logik

    <field name="ap_student_id" attrs="{'invisible': [('ap_persontype'),'not in',['student',]]}"/> <field name="ap_mother_id" attrs="{'invisible': [('ap_persontype'),'not in',['parent',]]}"/> <field name="ap_father_id" attrs="{'invisible': [('ap_persontype'),'not in',['parent',]]}"/>

Verwandte Themen