Many2one의 필드에 저장된 도메인 사용
예를 들어 사용자는 일부 규칙을 준수하는 경우에만 재고 위치를 선택할 수 있습니다. 이동 라인에 대해 허용된 위치를 제공하는 계산된 필드가 있을 수 있습니다.
문제
이 위치가 이 제품과 연결된 경우에만 해당 위치에서 제품 이동을 허용하는 가상의 사용 사례를 살펴보겠습니다.
파이썬에서:
class StockMoveLine(models.Model):
_inherit = "stock.move.line"
allowed_location_ids = fields.Many2many(
comodel_name="stock.location",
compute="_compute_allowed_location_ids"
)
@api.depends("product_id", "move_id.location_dest_id")
def _compute_allowed_location_ids(self):
for line in self:
destination = line.move_id.location_dest_id
line.allowed_location_ids = destination.allowed_sublocations(line.product_id)
그리고 XML 보기에서:
<field name="allowed_location_ids" invisible="1" />
<field name="location_dest_id" domain="[('id', 'in', allowed_location_ids)]"/>
예를 들어 많은 수의 위치가 있을 때까지 꽤 잘 작동합니다. 5000개의 허용된 위치. 제품을 변경하면 새
onchange
를 가져오기 위해 allowed_location_ids
가 트리거되는데, 이는 server_side에서 매우 빠르게 수행되지만 프런트 엔드가 멈추기 시작합니다(5-10초).이 문제는 모든 단일 ID를 처리해야 하는 Many2many 위젯에 5000개의 ID를 반환하기 때문에 발생합니다.
ℹ️ I encountered this issue in Odoo 13.0, it may or may not still happen on newer versions.
해결책
여기에 OCA 모듈web_domain_field이 구출됩니다.
설명에 명시된 바와 같이:
In order to mitigate these limitations this new addon allows you to use the value of a field as domain of another field in the xml definition of your view.
다른 흥미로운 사용 사례를 제공하는 모듈 설명을 읽어보세요.
필드에서 직접 설정된 도메인을 사용하면 뷰에서 Many2many 위젯이 단락되고 성능 문제가 해결됩니다.
이제 코드는 다음과 같습니다.
파이썬에서:
class StockMoveLine(models.Model):
_inherit = "stock.move.line"
allowed_location_domain = fields.Many2many(
comodel_name="stock.location",
compute="_compute_allowed_location_domain"
)
@api.depends("product_id", "move_id.location_dest_id")
def _compute_allowed_location_domain(self):
for line in self:
destination = line.move_id.location_dest_id
allowed_locations = destination.allowed_sublocations(line.product_id)
line.allowed_location_domain = json.dumps([("id", "in", allowed_locations.ids)])
그리고 XML 보기에서:
<field name="allowed_location_domain" invisible="1" />
<field name="location_dest_id" domain="allowed_location_domain"/>
이 Odoo 모듈을 보여주는 데 사용된 실제 사용 사례는
stock_storage_type
에 있었습니다.
Reference
이 문제에 관하여(Many2one의 필드에 저장된 도메인 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/guewen/using-a-domain-stored-in-a-field-for-a-many2one-5aa7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)