Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

1

many2one dynamic list

By
sameer alhwety
on 11/30/14, 10:02 AM 661 views

Hello , 

I have a many2one fields , and i want to hide some record from its list .

What's the function that get all list of many2one field and add it to menu list ?

UPDATED

 What if i want to change domain for field in many2one object ?


example : 


class Class_A(osv.osv):
    _name = "class.a"
    _columns = {
        'name': fields.char('Name'),
     }

class Class_B(osv.osv):
    _name = "class.b"
    _columns = {
        'target_field': fields.many2one('class.a')
        'class_b_id': fields.many2one('class.c'),
     }

class Class_C(osv.osv):
    _name = "class.c"
    _columns = {
        'user_id': fields.many2one('res.partner'),
        'class_b_mto': fields.one2many('class.b','class_b_id'),
     }

 

Class C in user_id field have on_change function , Now if i want to change the domain of target_field in class B not the same class of user_id . What i have to do ??

 

3
fourgaver6513
On 11/30/14, 11:53 PM

on_change can return 'domain' key which is a dictionary whose keys are the (m2o, m2m) name of the fields whose domain need to be changed and whose values are with their corresponding domain.

Thank you for repeating my answer.

Ivan
on 11/30/14, 11:54 PM

Thanks , It works good , but i have another issue , Please See Updated Question.

sameer alhwety
on 12/1/14, 4:50 AM
2

Med Said BARA

--Med Said BARA--
2664
| 5 5 7
Algeria
--Med Said BARA--
Med Said BARA
On 11/30/14, 7:13 PM

 By convention, many2one fields end with '_id'

What you have to do, to filter out some records is to add a domain filter in your field (in xml file).

For example, in your .py file: 'yourfield_id': fields.many2one('your.model','Something'),

And in you xml: <field name="yourfield_id" domain="[('Something', '=', True)]"/>  (or any other valid condition)

 

Thanks , but i have another issue , Please See Updated Question.

sameer alhwety
on 12/1/14, 4:51 AM

Without a concrete example i can't figure out what you really want. But, what you should remember is, with a fields.many2one the relation is from the current model to another model where a record from the current model can be linked to the same record of the other model. My advice is, try to study the code from the sale module (sale.py and sale_view.xml files) to see how the many2one relation is build, how the on_change method and domain filter are used... waiting for more comments ...

Med Said BARA
on 12/1/14, 9:11 AM
2

Jérémy Kersten (jke)

--Jérémy Kersten (jke)--
2983
| 3 2 5
Jodoigne, Belgium
--Jérémy Kersten (jke)--

Jérémy is a member of the core R&D team since september 2013. He developed several projects for OpenERP version 8 including the eCommerce, the Google Calendar synchronization and the new product variants/configurator. Now, he manages Odoo website and themes for saas.

Jérémy Kersten (jke)
On 11/30/14, 3:59 PM

Hello,

You can add a domain in the declaration of the field into the view to add a filter for the list...

 

Eg: 

<field name="partner_id" domain="[('name','=ilike','z%')]" />

It will only display a list of partner with name starting with "z"

 

JKE

Thanks , but i have another issue , Please See Updated Question.

sameer alhwety
on 12/1/14, 4:51 AM
1

Ivan

--Ivan--
3210
| 5 3 6
Jakarta, Indonesia
--Ivan--
Ivan
On 11/30/14, 10:07 PM

If by dynamic you mean the list of selection can change if the value of another field changed, then you need to implement on_change mechanism on the triggering field.  on_change can return 'domain' key which is a dictionary whose keys are the (m2o, m2m) name of the fields whose domain need to be changed and whose values are with their corresponding domain.

Thanks , but i have another issue , Please See Updated Question.

sameer alhwety
on 12/1/14, 4:52 AM

Sameer, it would be best to post another question if you have another issue. Anyway, the answer to your question is still the same. Now, you need to answer this first: which field will trigger the domain change for target_field (which is obviously should be from Class B's form view and should be Class B's field). Then you implement on_change on that field.

Ivan
on 12/1/14, 5:12 AM

Or do you actually want to domain / filter class_b_mto by it's target_field's value? Which is also possible.

Ivan
on 12/1/14, 5:14 AM

I try to trigger the domain of target_fields from class c , but not trigger , and the domain not changed to new domain . the problem that when i make some records of class c and apply the my default domain that will cause a problem , the problem is the domain will hide some record that not belong to domain . thanks for replay , any idea how to solve that problem ?

sameer alhwety
on 12/1/14, 5:22 AM

You cannot trigger domain of target_fields from class C. I'm not sure what you are trying to achieve here.

Ivan
on 12/1/14, 5:34 AM

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

3 follower(s)

Stats

Asked: 11/30/14, 10:02 AM
Seen: 661 times
Last updated: 3/16/15, 8:10 AM