Я познакомлю вас с контекстом.
Я скажу вам, что мне нужно сделать. У меня есть некоторые данные, сохраненные из базы данных, которые сохраняются в поле улицы, и я добавил новый модуль, который добавляет новые организованные поля, поэтому, поскольку в поле улицы уже есть информация, мне нужно проверить, нет ли информации в поле улицы. , сделайте поля адрес_тип, адрес_номер обязательными, в противном случае пусть оно зарегистрируется, это должно работать как для создания, так и для редактирования. У меня уже есть часть контактов, но это усложняет мне работу с пользователями.
Мне нужно проверить поля в контактной форме model=res.partner. Оказывается, эта форма используется в разных частях Odoo, таких как покупки, продажи, конфигурации пользователей.
Поэтому, когда я создаю или изменяю контакты в представлении контактов, проверки, которые я объявляю в коде, работают хорошо.
но когда я хочу создать запись на основе пользовательских конфигураций, проверки, которые я объявляю для контактов, также работают и блокируют записи пользователей.
Я нашел способ зафиксировать модальный из кода Python, например:
context = dict(self.env.context)
model = context.get('active_model', '')
Этот оператор помогает мне захватить модель, объявленную в моделях Odoo, но он захватывает только ту из: "res.config.settings" Остальные модели приходят пустыми, потому что у них нет объявленного этого поля. Существует форма, полученная из конфигурации пользователя, которая не разделяет эту модель, и, поскольку это пользователь, поля контактной формы проверяются.
Ниже я делюсь всем своим кодом Python. . Огромное спасибо за помощь, она очень ценна:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import ValidationError, UserError
import re
# my_contact_extension/models/res_partner.py
class ResPartner(models.Model):
_inherit = 'res.partner'
# Campos obligatorios
vat = fields.Char(string="NIT", required=True)
vat_vd = fields.Char(string='Dígito verificador', size=1, help='VD')
ciiu = fields.Many2many('ciiu', string='Clasificador CIIU')
zip_id = fields.Many2one('res.city.zip', string='Código postal')
mobile = fields.Char(string='Móvil', required=True)
email = fields.Char(string='Correo electrónico', required=True)
property_account_position_id = fields.Many2one('account.fiscal.position', string='Posición Fiscal', required=True)
birthday_date = fields.Date(string="Fecha de Cumpleaños")
# campos de direccion de la dian
address_type = fields.Many2one(comodel_name='street_dian.nomenclature_dian')
address_number = fields.Char()
address_numer2 = fields.Char()
address_numer3 = fields.Char()
@api.model
def create(self, vals):
print(f"[INFO] Modelo de create modulo contacts_fields_required")
context = dict(self.env.context)
model = context.get('active_model', '')
if vals["category_id"] == "":
if model != "res.config.settings":
# if not "message_bounce" in vals:
# Validar que el campo street no esté vacío
if vals.get('street')==None or vals.get('street') ==False:
if (vals.get('address_type')==None or vals.get('address_type')==False) and (vals.get('address_number')==None or vals.get('address_number')==False):
raise UserError("los campos Tipo direccion, Nombre direccion, # y complemento son obligatorios.")
if 'vat' in vals:
vals['vat'] = vals['vat'].strip().lower()
self._check_unique_vat_res_parther(vals['vat'])
return super(ResPartner, self).create(vals)
return super(ResPartner, self).create(vals)
def write(self, vals):
print(f"[INFO] Modelo de write modulo contacts_fields_required")
context = dict(self.env.context)
model = context.get('active_model', '')
# validamos el campo vat 1, normalizamos 2, sea unico
if model != "res.config.settings":
if len(str(self.street))
Подробнее здесь: https://stackoverflow.com/questions/788 ... d-or-model