#python #class #model #odoo
#python #класс #Модель #odoo
Вопрос:
Я хочу, чтобы, когда пользователь выбрал (через поле Many2one) категорию, мне нужно найти связанную parent_id
Brands
с ней категорию, чтобы добавить фильтр домена в другое поле Many2one, чтобы иметь связанные дочерние записи этих брендов. Поскольку я новичок, я не смог понять, как это сделать.
Предположим, category_id
что здесь поле Many2one, пользователь выберет категорию из первых трех записей, теперь мы знаем, что пользователь хочет добавить элемент, связанный с электроникой, тогда система должна заполнить поле brand_id
Many2one для брендов, связанных с электроникой (кроме All / Electronics / Brands), чтобы выбрать из последних 2 записей ниже здесь, во All / Electronics.
All / Electronics / Personal Computers
All / Electronics / Personal Computers / Laptop
All / Electronics / Personal Computers / Desktop
...
...
All / Electronics / Brands
All / Electronics / Brands / HP
All / Electronics / Brands / IBM
В этой модели есть больше брендов (данные таблицы), таких как:
All / Foods / Brands
All / Foods / Brands / Hershey
All / Foods / Brands / Heinz
All / Foods / Brands / Oreo
...
All / Services / Brands
All / Services / Brands / IBM Garages
All / Services / Brands / Telos MNS
All / Services / Brands / Relia Quest
...
Мой пользовательский класс модели:
class OrderItems(models.Model):
_name = 'tests.orderitems'
_description = "Tests Order Items"
store_id = fields.Many2one('tests.stores', string="Store", ondelete='cascade')
order_id = fields.Many2one('tests.testsorders')
categry_id = fields.Many2one('product.category', string="Category",
domain="[['complete_name', 'not like', '%Brands%']]")
items_id = fields.Many2one('tests.storeitems', string="Item",
domain="[['categs_id', '=', categry_id]]")
brand_id = fields.Many2one('product.category', string="Brand",
domain="[['complete_name', 'like', '%Brands%']]")
unit_id = fields.Many2one('tests.units', string="Unit")
quantity = fields.Integer(string="Quantity", required=True, default=1)
rates = fields.Float(string="Rate", default=0)
size = fields.Char(string="Size")
Пожалуйста, помогите, как я могу это сделать.
Ответ №1:
@SDBot, xml-код для этой конкретной модели находится здесь…
<notebook>
<page string="Order Items">
<field name="order_ids">
<tree editable="bottom" string="Order Items">
<field name="store_id"/>
<field name="categry_id"/>
<field name="items_id"/>
<field name="categ_name"/>
<field name="brand_id"/>
<field name="unit_id"/>
<field name="quantity"/>
</tree>
</field>
</page>
</notebook>
Модель, в которой добавлено поле categ_name и домен в brand_id
class OrderItems(models.Model):
_name = 'tests.orderitems'
_description = "Tests Order Items"
store_id = fields.Many2one('tests.stores', string="Store", ondelete='cascade')
order_id = fields.Many2one('tests.testsorders')
categry_id = fields.Many2one('product.category', string="Category",
domain="[['complete_name', 'not like', '%Brands%']]")
items_id = fields.Many2one('tests.storeitems', string="Item",
domain="[['categs_id', '=', categry_id]]")
categ_name = fields.Char('Category Name', related='categry_id.complete_name')
brand_id = fields.Many2one('product.category', string="Brand",
domain="[('complete_name', 'like', categ_name),('complete_name', '!=', categ_name)]")
unit_id = fields.Many2one('tests.units', string="Unit")
quantity = fields.Integer(string="Quantity", required=True, default=1)
rates = fields.Float(string="Rate", default=0)
size = fields.Char(string="Size")
Ответ №2:
Измените свой домен brand_id на:
categ_name = fields.char('Category Name', related='categry_id.complete_name')
brand_id = fields.Many2one('product.category', string="Brand",
domain="[('complete_name', 'like', categ_name),('complete_name', '!=', categ_name)]")
Вот предварительный просмотр:
Комментарии:
1. спасибо @SDBot, но он показывает пустой список, выбирать нечего.
2. о’кей, виноват, я обновил код, можешь попробовать? обязательно включите поле categ_name в представление (если хотите, установите для него значение невидимый).
3. спасибо за ваш интерес помочь мне… но, к сожалению, по-прежнему это не работает (по-прежнему отображается пустой список), также добавлено поле в его представлении (xml) в соответствии с требованиями. я хочу показывать только связанные бренды, когда пользователь выбрал категорию. пользователь может выбрать один из них в качестве All / Foods / Bakery, и список должен содержать дочерние записи всех / Foods / брендов. то же самое для других строк любого уровня. с уважением
4. можете ли вы показать мне свой XML-файл? я думаю, вы, возможно, добавили туда домен
5. в разделе Добавить комментарий это невозможно, я должен показать это в разделе ответов здесь.