diff options
| author | Raphael Collet <rco@openerp.com> | 2014-08-27 10:45:56 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2014-08-27 10:45:56 +0200 |
| commit | 570ea406c8fda57bf9bb8cfc7256adb05b6429e0 (patch) | |
| tree | d0406d4cfa25d827383036423fe5bc8cb513d60b /doc | |
| parent | 856daf8df9d811a01a93c16a4efd2d7026585308 (diff) | |
[IMP] doc/howtos/backend: improve exercises on relational fields
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/howtos/backend.rst | 42 | ||||
| -rw-r--r-- | doc/howtos/backend/exercise-many2many | 17 | ||||
| -rw-r--r-- | doc/howtos/backend/exercise-many2one | 85 | ||||
| -rw-r--r-- | doc/howtos/backend/exercise-one2many | 24 | ||||
| -rw-r--r-- | doc/howtos/backend/exercise-session | 43 | ||||
| -rw-r--r-- | doc/howtos/backend/series | 1 |
6 files changed, 157 insertions, 55 deletions
diff --git a/doc/howtos/backend.rst b/doc/howtos/backend.rst index de96f53ba58..7af76db6354 100644 --- a/doc/howtos/backend.rst +++ b/doc/howtos/backend.rst @@ -496,11 +496,12 @@ client data; it is also related to its sale order line records. Create a model for *sessions*. A session has a name, a start date, a duration and a number of seats. Add an action and a menu item to display - them. + them. Make the new model visible via a menu item. .. only:: solutions - Create the class *Session* in ``openacademy/models.py``. + #. Create the class *Session* in ``openacademy/models.py``. + #. Add access to the session object in ``openacademy/view/openacademy.xml``. .. patch:: @@ -530,7 +531,7 @@ Relational field types are: accessing it results in a (possibly empty) set of records:: for other in foo.other_ids: - print foo.name + print other.name .. danger:: @@ -544,7 +545,7 @@ Relational field types are: records, accessing it also results in a possibly empty set of records:: for other in foo.other_ids: - print foo.name + print other.name .. exercise:: Many2one relations @@ -557,12 +558,12 @@ Relational field types are: built-in model ``res.partner``. - A session is related to a *course*; the value of that field is a record of the model ``openacademy.course`` and is required. + - Adapt the views. .. only:: solutions #. Add the relevant ``Many2one`` fields to the models, and - #. add access to the session object in - ``openacademy/view/openacademy.xml``. + #. add them in the views. .. patch:: @@ -573,7 +574,8 @@ Relational field types are: .. only:: solutions - Modify the ``Course`` class as follows: + #. Modify the ``Course`` class, and + #. add the field in the course form view. .. patch:: @@ -582,32 +584,12 @@ Relational field types are: Using the relational field many2many, modify the *Session* model to relate every session to a set of *attendees*. Attendees will be represented by partner records, so we will relate to the built-in model ``res.partner``. + Adapt the views accordingly. .. only:: solutions - Modify the ``Session`` class as follows: - - .. patch:: - -.. exercise:: Views modification - - For the *Course* model, - - * the name and instructor for the course should be displayed in the tree - view - * the form view should display the course name and responsible at - the top, followed by the course description in a tab and the course - sessions in a second tab - - For the *Session* model, - - * the name of the session and the session course should be displayed in - the tree view - * the form view should display all the session's fields - - Try to lay out the form views so that they're clear and readable. - - .. only:: solutions + #. Modify the ``Session`` class, and + #. add the field in the form view. .. patch:: diff --git a/doc/howtos/backend/exercise-many2many b/doc/howtos/backend/exercise-many2many index e8242a46a5a..b463bd612d3 100644 --- a/doc/howtos/backend/exercise-many2many +++ b/doc/howtos/backend/exercise-many2many @@ -1,9 +1,22 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:25:59.483783379 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:25:59.479783379 +0200 +--- addons.orig/openacademy/models.py 2014-08-27 10:34:08.531934946 +0200 ++++ addons/openacademy/models.py 2014-08-27 10:34:08.527934946 +0200 @@ -25,3 +25,4 @@ instructor_id = fields.Many2one('res.partner', string="Instructor") course_id = fields.Many2one('openacademy.course', ondelete='cascade', string="Course", required=True) + attendee_ids = fields.Many2many('res.partner', string="Attendees") +Index: addons/openacademy/views/openacademy.xml +=================================================================== +--- addons.orig/openacademy/views/openacademy.xml 2014-08-27 10:34:08.531934946 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-27 10:34:08.527934946 +0200 +@@ -102,6 +102,8 @@ + <field name="seats"/> + </group> + </group> ++ <label for="attendee_ids"/> ++ <field name="attendee_ids"/> + </sheet> + </form> + </field> diff --git a/doc/howtos/backend/exercise-many2one b/doc/howtos/backend/exercise-many2one index 1029ffc5e9f..6eade5c1f29 100644 --- a/doc/howtos/backend/exercise-many2one +++ b/doc/howtos/backend/exercise-many2one @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:25:57.515783409 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:25:57.511783409 +0200 +--- addons.orig/openacademy/models.py 2014-08-27 10:37:10.135932250 +0200 ++++ addons/openacademy/models.py 2014-08-27 10:37:10.131932250 +0200 @@ -8,6 +8,9 @@ name = fields.Char(string="Title", required=True) description = fields.Text() @@ -25,22 +25,71 @@ Index: addons/openacademy/models.py + ondelete='cascade', string="Course", required=True) Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:25:57.515783409 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:25:57.511783409 +0200 -@@ -64,5 +64,16 @@ - <!-- Full id location: - action="openacademy.course_list_action" - It is not required when it is the same module --> +--- addons.orig/openacademy/views/openacademy.xml 2014-08-27 10:37:10.135932250 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-27 10:37:10.131932250 +0200 +@@ -9,6 +9,7 @@ + <sheet> + <group> + <field name="name"/> ++ <field name="responsible_id"/> + </group> + <notebook> + <page string="Description"> +@@ -34,6 +35,18 @@ + </field> + </record> + ++ <!-- override the automatically generated list view for courses --> ++ <record model="ir.ui.view" id="course_tree_view"> ++ <field name="name">course.tree</field> ++ <field name="model">openacademy.course</field> ++ <field name="arch" type="xml"> ++ <tree string="Course Tree"> ++ <field name="name"/> ++ <field name="responsible_id"/> ++ </tree> ++ </field> ++ </record> + -+ <record model="ir.actions.act_window" id="session_list_action"> -+ <field name="name">Sessions</field> -+ <field name="res_model">openacademy.session</field> -+ <field name="view_type">form</field> -+ <field name="view_mode">tree,form</field> + <!-- window action --> + <!-- + The following tag is an action definition for a "window action", +@@ -73,16 +86,34 @@ + <form string="Session Form"> + <sheet> + <group> +- <field name="name"/> +- <field name="start_date"/> +- <field name="duration"/> +- <field name="seats"/> ++ <group string="General"> ++ <field name="course_id"/> ++ <field name="name"/> ++ <field name="instructor_id"/> ++ </group> ++ <group string="Schedule"> ++ <field name="start_date"/> ++ <field name="duration"/> ++ <field name="seats"/> ++ </group> + </group> + </sheet> + </form> + </field> + </record> + ++ <!-- session tree/list view --> ++ <record model="ir.ui.view" id="session_tree_view"> ++ <field name="name">session.tree</field> ++ <field name="model">openacademy.session</field> ++ <field name="arch" type="xml"> ++ <tree string="Session Tree"> ++ <field name="name"/> ++ <field name="course_id"/> ++ </tree> ++ </field> + </record> + -+ <menuitem id="session_menu" name="Sessions" -+ parent="openacademy_menu" -+ action="session_list_action"/> - </data> - </openerp> + <record model="ir.actions.act_window" id="session_list_action"> + <field name="name">Sessions</field> + <field name="res_model">openacademy.session</field> diff --git a/doc/howtos/backend/exercise-one2many b/doc/howtos/backend/exercise-one2many index 6d5f18e6e7c..b06733210a1 100644 --- a/doc/howtos/backend/exercise-one2many +++ b/doc/howtos/backend/exercise-one2many @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:25:58.455783395 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:25:58.447783395 +0200 +--- addons.orig/openacademy/models.py 2014-08-27 10:37:24.591932036 +0200 ++++ addons/openacademy/models.py 2014-08-27 10:37:24.583932036 +0200 @@ -10,6 +10,8 @@ responsible_id = fields.Many2one('res.users', @@ -14,3 +14,23 @@ Index: addons/openacademy/models.py class Session(models.Model): +Index: addons/openacademy/views/openacademy.xml +=================================================================== +--- addons.orig/openacademy/views/openacademy.xml 2014-08-27 10:37:24.591932036 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-27 10:37:24.583932036 +0200 +@@ -15,8 +15,13 @@ + <page string="Description"> + <field name="description"/> + </page> +- <page string="About"> +- This is an example of notebooks ++ <page string="Sessions"> ++ <field name="session_ids"> ++ <tree string="Registered sessions"> ++ <field name="name"/> ++ <field name="instructor_id"/> ++ </tree> ++ </field> + </page> + </notebook> + </sheet> diff --git a/doc/howtos/backend/exercise-session b/doc/howtos/backend/exercise-session index ec3c845b15e..993ee0a7dd6 100644 --- a/doc/howtos/backend/exercise-session +++ b/doc/howtos/backend/exercise-session @@ -2,8 +2,8 @@ # Parent 22f8d180a7f9ad209d7e98cf7d1bd0fee1f05350 Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:25:56.603783422 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:25:56.595783422 +0200 +--- addons.orig/openacademy/models.py 2014-08-27 10:35:29.179933749 +0200 ++++ addons/openacademy/models.py 2014-08-27 10:35:56.000000000 +0200 @@ -7,3 +7,12 @@ name = fields.Char(string="Title", required=True) @@ -17,3 +17,42 @@ Index: addons/openacademy/models.py + start_date = fields.Date() + duration = fields.Float(digits=(6, 2), help="Duration in days") + seats = fields.Integer(string="Number of seats") +Index: addons/openacademy/views/openacademy.xml +=================================================================== +--- addons.orig/openacademy/views/openacademy.xml 2014-08-27 10:35:29.179933749 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-27 10:36:54.643932480 +0200 +@@ -64,5 +64,34 @@ + <!-- Full id location: + action="openacademy.course_list_action" + It is not required when it is the same module --> ++ ++ <!-- session form view --> ++ <record model="ir.ui.view" id="session_form_view"> ++ <field name="name">session.form</field> ++ <field name="model">openacademy.session</field> ++ <field name="arch" type="xml"> ++ <form string="Session Form"> ++ <sheet> ++ <group> ++ <field name="name"/> ++ <field name="start_date"/> ++ <field name="duration"/> ++ <field name="seats"/> ++ </group> ++ </sheet> ++ </form> ++ </field> ++ </record> ++ ++ <record model="ir.actions.act_window" id="session_list_action"> ++ <field name="name">Sessions</field> ++ <field name="res_model">openacademy.session</field> ++ <field name="view_type">form</field> ++ <field name="view_mode">tree,form</field> ++ </record> ++ ++ <menuitem id="session_menu" name="Sessions" ++ parent="openacademy_menu" ++ action="session_list_action"/> + </data> + </openerp> diff --git a/doc/howtos/backend/series b/doc/howtos/backend/series index 0206331ebaa..c21ba1502bd 100644 --- a/doc/howtos/backend/series +++ b/doc/howtos/backend/series @@ -9,7 +9,6 @@ exercise-session exercise-many2one exercise-one2many exercise-many2many -exercise-o2m-views exercise-model-inheritance exercise-domain-basic exercise-domain-advanced |
