#python #odoo-13
#python #odoo-13
Вопрос:
<record id="product.product_normal_action_sell" model="ir.actions.act_window">
<field name="name">Product Variants</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.product</field>
<field name="view_mode">kanban,tree,form,activity</field>
<field name="context">{"search_default_filter_to_sell":1}</field>
<field name="domain">[('user', '=', "Ignored value")]</field>
<field name="view_id" ref="product.product_product_tree_view"/>
<field name="search_view_id" ref="product.product_search_form_view"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new product variant
</p><p>
You must define a product for everything you sell, whether it's a physical product,
a consumable or a service you offer to customers.
The product form contains information to simplify the sale process:
price, notes in the quotation, accounting data, procurement methods, etc.
</p>
</field>
</record>
Я хочу всегда менять поле пользователя при входе в систему.
Я знаю, что могу использовать значение по умолчанию, но функция по умолчанию не повлияет на выходящий продукт.Для этого я хочу использовать поле, связанное с пользователем.Пожалуйста, предложите мне.
_inherit = 'product.template'
_description = "Product filter"
category_branch = fields.Many2one('multi.branch', string="Branch Name",related="categ_id.branch_id",rea
class ResUsers(models.Model):
"""Res Users Model."""
_inherit = 'res.users'
@api.model
def _get_branch(self):
return self.env.user.branch_id
branch_id = fields.Many2one('multi.branch', string='Branch',
default=_get_branch,
help='The branch this user is currently
working for.')
donly= True)
Ответ №1:
Связанные поля являются частным случаем вычисляемых полей, которые являются связанными (прокси) полями, которые предоставляют значение подполя в текущей записи.
Значение связанного поля задается путем следования последовательности реляционных полей и чтения поля в достигнутой модели. Полная последовательность полей для обхода задается related
атрибутом.
self.env.user
это не последовательность реляционных полей, вы не можете использовать ее в related
параметре.
Вам нужно определить его как вычисляемое поле, чтобы получить значение текущего пользователя и вернуть его по запросу.
def _get_current_user(self):
for r in self:
r.user_id = self.env.user
def _search_branch(self, operator, value):
return [('categ_id.branch_id', operator, self.env.user.branch_id.id)]
user = fields.Many2one('res.users', compute='_get_current_user', search='_search_branch')
Редактировать:
поиск по вычисляемому полю можно включить, установив параметр поиска. Значение представляет собой имя метода, возвращающее поисковые домены.
Метод поиска вызывается при обработке доменов перед выполнением фактического поиска в модели. Он должен возвращать домен, эквивалентный условию: field operator value
.
Вам нужно заменить value
параметр, возвращаемый доменом поиска на self.env.user.branch_id.id
затем попробуйте использовать следующий домен в действии шаблона продукта:
[('user', '=', "Ignored value")]
Пример:
class ResUsers(models.Model):
_inherit = 'res.users'
branch_id = fields.Many2one('multi.branch')
class ProductCategory(models.Model):
_inherit = 'product.category'
branch_id = fields.Many2one('multi.branch')
class ProductTemplate(models.Model):
_inherit = 'product.template'
user = fields.Many2one("res.users", compute='_get_current_user', search='_search_branch')
def _get_current_user(self):
for r in self:
r.user_branch = self.env.user.id
def _search_branch(self, operator, value):
return [('categ_id.branch_id', operator, self.env.user.branch_id.id)]
Комментарии:
1. Спасибо за ваш ответ. Но вычислить поле не может пользователь для фильтра домена, я хочу использовать это поле в качестве фильтра домена. Когда я добавляю store = True , выходящий продукт пуст для этого поля. Можете ли вы помочь мне, как я могу это сделать? Моя проблема в том, что каждый пользователь, входящий в систему, изменяет это поле пользователя в продукте и хочет фильтровать для текущего пользователя входа.
2. Непонятно, пожалуйста, объясните, чего вам нужно достичь и как вам нужно это фильтровать.
3. На самом деле я хочу добавить одно поле типа user для каждого продукта, и когда вход текущего пользователя совпадает с пользователем в продукте, я хочу отображать продукт только того же пользователя в представлении продукта о продаже. Не отображать продукт, который не совпадает с текущим пользователем.
4. Когда я фильтрую пользователя в представлении продукта о продаже, отображается только тот продукт, поле пользователя которого совпадает с текущим пользователем входа.
5. Вам нужно назначить продукт конкретному пользователю?