← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 813375] [NEW] [Feature Request] Support m2m throught a custom object

 

Public bug reported:

Hi,

I would like to propose an improvement for the many2many fields in the
future 6.1. Currently, OpenERP automatically create and fille a relation
table containing two columns, to make a link between objects of a m2m
relation.

The problem is that you can't add extra column to this table easily. An
workaround is to define a "link object" by yourself, like this :

class PartnerAddressRelation(osv.osv):
    _name = 'partner_address_rel'
    _columns = {
        'partner_id' : fields.many2one('res.partner'),
        'address_id' : fields.many2one('res.partner'),
        '...' : ... other columns ...
    }

By doing this, we loose all the m2m advantages : the widget in client
(instead, we see the relational table, not the related object). This is
a really missing feature, because sometimes you have to store
information "When this client subscribed this contract". And the table
which links clients to contracts is the good place to store this.

Implementation proposal :

I think fields.many2many should support a "throught" argument, to
specify the object which do the link. We could either use the old
system, or pass a "throught" argument (which would ignore others m2m
arguments). Example :

class Partner(osv.osv):
    _name = 'res.partner'
    _columns = {
        'contracts' : fields.many2many('Contracts', throught='partner_contracts_rel')
    }

class PartnerContractsRelation(osv.osv):
    _name = 'partner_contracts_rel'
    _columns = {
        'partner_id' : fields.many2one('res.partner'),
        'contract_id' : fields.many2one('contract'),
        'subscription_datetime' : fields.datetime('Subscribed'),
    }

When displaying the 'contracts' field in the res.partner form view,
OpenERP should display a m2m widget, with "extra" relational columns :
subscription_datetime, and related objects columns (contracts objects
columns).

We should also support a way to modify the extra fields into the
relational table easily.

What do you think about this ? Thanks to propose your ideas :-)

** Affects: openobject-server
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/813375

Title:
  [Feature Request] Support m2m throught a custom object

Status in OpenERP Server:
  New

Bug description:
  Hi,

  I would like to propose an improvement for the many2many fields in the
  future 6.1. Currently, OpenERP automatically create and fille a
  relation table containing two columns, to make a link between objects
  of a m2m relation.

  The problem is that you can't add extra column to this table easily.
  An workaround is to define a "link object" by yourself, like this :

  class PartnerAddressRelation(osv.osv):
      _name = 'partner_address_rel'
      _columns = {
          'partner_id' : fields.many2one('res.partner'),
          'address_id' : fields.many2one('res.partner'),
          '...' : ... other columns ...
      }

  By doing this, we loose all the m2m advantages : the widget in client
  (instead, we see the relational table, not the related object). This
  is a really missing feature, because sometimes you have to store
  information "When this client subscribed this contract". And the table
  which links clients to contracts is the good place to store this.

  Implementation proposal :

  I think fields.many2many should support a "throught" argument, to
  specify the object which do the link. We could either use the old
  system, or pass a "throught" argument (which would ignore others m2m
  arguments). Example :

  class Partner(osv.osv):
      _name = 'res.partner'
      _columns = {
          'contracts' : fields.many2many('Contracts', throught='partner_contracts_rel')
      }

  class PartnerContractsRelation(osv.osv):
      _name = 'partner_contracts_rel'
      _columns = {
          'partner_id' : fields.many2one('res.partner'),
          'contract_id' : fields.many2one('contract'),
          'subscription_datetime' : fields.datetime('Subscribed'),
      }

  When displaying the 'contracts' field in the res.partner form view,
  OpenERP should display a m2m widget, with "extra" relational columns :
  subscription_datetime, and related objects columns (contracts objects
  columns).

  We should also support a way to modify the extra fields into the
  relational table easily.

  What do you think about this ? Thanks to propose your ideas :-)

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/813375/+subscriptions


Follow ups

References