You need to use tuples to write to many2many records:
In your case if the authors don't exist, and you want to create them, you would use:
orm_paper.create({'title': title, 'author_ids': [(0, 0, {'first_name': first_name, 'last_name': last_name})]
if the author does exist you would use:
orm_paper.create({'title': title, 'author_ids': [(4, author_id)]})
The following can be found at /openerp/models.py, and describes how to use the appropriate "triplet"
:class:`~openerp.fields.One2many` and
:class:`~openerp.fields.Many2many` use a special "commands" format to
manipulate the set of records stored in/associated with the field.
This format is a list of triplets executed sequentially, where each
triplet is a command to execute on the set of records. Not all
commands apply in all situations. Possible commands are:
``(0, _, values)``
adds a new record created from the provided ``value`` dict.
``(1, id, values)``
updates an existing record of id ``id`` with the values in
``values``. Can not be used in :meth:`~.create`.
``(2, id, _)``
removes the record of id ``id`` from the set, then deletes it
(from the database). Can not be used in :meth:`~.create`.
``(3, id, _)``
removes the record of id ``id`` from the set, but does not
delete it. Can not be used on
:class:`~openerp.fields.One2many`. Can not be used in
:meth:`~.create`.
``(4, id, _)``
adds an existing record of id ``id`` to the set. Can not be
used on :class:`~openerp.fields.One2many`.
``(5, _, _)``
removes all records from the set, equivalent to using the
command ``3`` on every record explicitly. Can not be used on
:class:`~openerp.fields.One2many`. Can not be used in
:meth:`~.create`.
``(6, _, ids)``
replaces all existing records in the set by the ``ids`` list,
equivalent to using the command ``5`` followed by a command
``4`` for each ``id`` in ``ids``. Can not be used on
:class:`~openerp.fields.One2many`.
SOLUTION: orm_paper.create({'title': title, 'author_ids': [(6, 0, author_ids)]}) using: (6, _, ids) triplet from the Odoo docs: "Values marked as _ in the list above are ignored and can be anything, generally 0 or False."