Modules use data files to load their configurations into the database, default data, and demonstration data. This can be done using both CSV and XML files. For completeness, the YAML file format can also be used, but it is very rare for it to be used to load data; therefore, we won't be discussing it.

CSV files used by modules are exactly the same as those we have seen and used for the import feature. When using them in modules, one additional restriction is that the filename must match the name of the model to which the data will be loaded so the system can infer the model into which the data should be imported.

A common usage of data CSV files is for accessing security definitions, loaded into the ir.model.access model. They usually use CSV files that are named ir.model.access.csv.

Odoo addon modules may install demonstration data, and it is considered good practice to do so. This is useful to provide usage examples for a module and datasets to be used in tests. Demonstration data for a module is declared using the demo attribute of the __manifest__.py manifest file. Just like the data attribute, it is a list of filenames with the corresponding relative paths inside the module.

It's time to add some demonstration data to our todo_user module. We can start by exporting some data from the to-do tasks, as explained in the previous section. The convention is to place data files in a data/ subdirectory. So we should save these data files in the todo_user addon module as data/todo.task.csv. Since this data will be owned by our module, we should edit the id values to remove the __export__ prefix in the identifiers.

As an example, our todo.task.csv  data file might look like this:

id,name,user_id/id,date_deadline 
todo_task_a,"Install Odoo","base.user_root","2015-01-30" 
todo_task_b","Create dev database","base.user_root","" 

We must not forget to add this data file to the __manifest__.py manifest demo attribute:

'demo': ['data/todo.task.csv'], 

Next time we update the module, as long as it is installed with demo data enabled, the content of the file will be imported. Note that this data will be reimported whenever a module upgrade is performed.

XML files are also used to load module data. Let's learn more about what XML data files can do that CSV files can't.