Я хотел бы сделать фильтр на поле Many2one в Odoo 8. Это для модуля запаса.Фильтр домена Odoo 8 на поле Many2one
Я создал дополнительные поля, где пользователь может ввести дополнительную информацию. Теперь мы хотим отфильтровать доступные поля, которые появляются в раскрывающемся списке, или при нажатии кнопки «больше», чтобы показывать только дополнительные поля для этого продукта.
Это код для модели stock.production.lot Когда product_id обновлен, необходимо изменить фильтр домена.
class StockProductionLot(models.Model):
_inherit = "stock.production.lot"
lot_lot_additional_fields = fields.One2many("lot.lot.additional.fields", "stock_production_lot")
@api.onchange("product_id")
def onchange_product_id(self):
res = {}
cat_fields = self.product_id.categ_id.lot_fields_category.lot_additional_fields
ids = []
for item in cat_fields:
ids.append(item.id)
if self.product_id:
res["domain"] = {"lot_additional_fields": [("id", "in", "ids")]}
return res
Это модель для подключения модели дополнительных полей к модели номера партии. Здесь необходимо обновить лот_additional_fields.
class LotLotAdditionalFields(models.Model):
_name = "lot.lot.additional.fields"
value = fields.Char("Value")
stock_production_lot = fields.Many2one("stock.production.lot", string="Lot/Serial Number")
lot_additional_fields = fields.Many2one("lot.additional.fields", string="Additional field")
Если кто-то может помочь мне решить эту проблему, я буду очень благодарен.
============== РЕДАКТИРОВАНИЕ ============================================= =======
Я добавил код stock.production.lot
class StockProductionLot(models.Model):
_inherit = "stock.production.lot"
lot_lot_additional_fields = fields.One2many("lot.lot.additional.fields", "stock_production_lot")
lot_additional_fields = fields.Many2one("lot.additional.fields", string="Lot additional fields")
remarks = fields.Html("General remarks")
@api.onchange('product_id')
def onchange_product_id(self):
res = {}
if self.product_id:
ids = self.product_id.categ_id.lot_fields_category.lot_additional_fields.mapped('id')
res['domain'] = {'lot_lot_additional_fields': [('lot_additional_fields', 'in', ids)]}
return res
к lot.additional.fields я добавил product_id:
class LotAdditionalFields(models.Model):
_name = "lot.additional.fields"
name = fields.Char("Name", required=True)
type = fields.Selection(
[("int", "Numerical"), ("string", "Alfanumerical"), ("boolean", "Checkbox"), ("date", "Date")], required=True)
mandatory = fields.Boolean("Mandatory field")
display_order = fields.Integer("Display Order")
lot_field_category = fields.Many2many("lot.field.category", string="Field Category", required=True)
lot_lot_additional_fields = fields.One2many("lot.lot.additional.fields", "lot_additional_fields")
product_id = fields.Many2one("product.product", string="Product ID")
lot_lot_additional_fields у меня есть остались такими же:
class LotLotAdditionalFields(models.Model):
_name = "lot.lot.additional.fields"
value = fields.Char("Value")
stock_production_lot = fields.Many2one("stock.production.lot", string="Lot/Serial Number")
lot_additional_fields = fields.Many2one("lot.additional.fields", string="Additional field")
Я также добавить код XML:
<record id="view_production_lot_form" model="ir.ui.view">
<field name="name">Stock Production Lot Form</field>
<field name="model">stock.production.lot</field>
<field name="inherit_id" ref="stock.view_production_lot_form"/>
<field name="arch" type="xml">
<page string="Products" position="after">
<page string="Additional Fields">
<field name="lot_lot_additional_fields" >
<tree editable="bottom">
<field name="lot_additional_fields" />
<field name="value"/>
</tree>
</field>
<h3>General remarks</h3>
<field name="remarks"/>
</page>
</page>
</field>
</record>
Привет Торвас, я пробовал ваше решение, но оно не кажется работать. Причина в том, что я могу только указать имя поля в декораторе. –
Хорошо, я лучше прочитал ваш вопрос, я отредактирую ответ. – forvas
Большое спасибо за ваши усилия, заставки. Но, похоже, он еще не готов. Я добавил дополнительный код. Я до сих пор довольно новичок в программировании в Odoo, поэтому есть чему поучиться. –