Nano Hash - криптовалюты, майнинг, программирование

Как я могу изменить поле выбора из другого класса в odoo 9?

Я хочу изменить поле «invoice_status» из класса «SaleOrder», связанного со счетом-фактурой после проверки этого счета-фактуры.

Проверка счета определяется в классе «AccountInvoice» внутри модуля учетной записи:

@api.multi
def invoice_validate(self):
  ...

Я понял, что поле «имя» из класса «SaleOrder» связано с полем «происхождение» из класса «AccountInvoice».

Итак, я изменил функцию invoice_validate следующим образом:

@api.multi
def invoice_validate(self):
    for invoice in self:
        ...
        origin = self.origin
        sale_order_id = self.env['sale.order'].search([('name', '=', origin)])[0].id
        sale_order_obj = self.env['sale.order'].browse(sale_order_id)
        sale_order_obj.write({'invoice_status': 'invoiced'})
    return self.write({'state': 'open'})

По какой-то причине часть записи не работает.

Это официальное определение поля «invoice_status» из класса SaleOrder:

invoice_status = fields.Selection([
    ('upselling', 'Upselling Opportunity'),
    ('invoiced', 'Fully Invoiced'),
    ('to invoice', 'To Invoice'),
    ('no', 'Nothing to Invoice')
    ], string='Invoice Status', compute='_get_invoiced', store=True, readonly=True, default='no')
18.01.2017

Ответы:


1

Вы не можете установить значение invoice_status, потому что это вычисляемое поле. Даже если вы установите его значение, оно будет пересчитано снова, когда поле, от которого оно зависит, будет изменено, и в конечном итоге найдет значение, которое оно должно иметь, - и запишет это значение вместо вашего.

Odoo сделал так, чтобы он работал (он будет говорить о выставлении счета, когда заказ выставляется в счете). Так что я не думаю, что вам нужно делать это вручную. Если вам крайне необходимо сохранить ваше значение, вы должны изменить это поле, чтобы оно больше не вычислялось, или создать другое поле.

19.01.2017
  • Да, я знаю, что поле будет пересчитано снова, если поле, от которого оно зависит, будет изменено, но когда я проверяю счет, я никогда не изменю этот заказ на продажу или счет, и я хочу, чтобы поле invoice_status имело это значение. Ваш ответ многое мне проясняет. Спасибо 19.01.2017
  • Щелчок по кнопке запускает запись в запись. Предположим, что поле в sale.order зависит от invoice_id (ссылка). Это будет запускать вычисление этого поля каждый раз, когда вы вызываете запись в указанном счете. Итак, в этой последней строке (return self.write({'state'; 'open'})): после того, как вы записываете запись, происходит вычисление, и ваше значение изменяется на значение, которое вам не нужно. 19.01.2017

  • 2

    Проверьте атрибут selection_add класса Selection.

    Если вы хотите добавить некоторые элементы в поле выбора, вы должны переопределить его в другом классе, наследующем ту же модель, и объявить его следующим образом:

    invoice_status = fields.Selection(selection_add=[("state", "open")])
    

    Ознакомьтесь с документацией по классу Selection и найдите selection_add в своей кодовой базе, чтобы увидеть несколько примеров.

    18.01.2017
  • Спасибо за ответ, но это не главное. Я не хочу добавлять новые элементы в поле выбора. Я хочу изменить его с другим значением его собственных значений. Избегайте части возврата, она сбивает вас с толку. Я хочу установить значение инвойса (которое уже существует) в поле инвойс_статус. 18.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..