Odoo l oop через строку подписки, затем установите значение в поле - PullRequest
1 голос
/ 08 мая 2020

Привет, я новичок в разработке как python, так и Odoo. Раньше я использовал веб-интерфейс для настройки. Я пытался создать класс, чтобы

  1. добавить поле в sale.subscription Model

subscription_tier = fields.Char(string='Subscription Tier',readonly=True)

, который работает, но вторая часть не работает 2. l oop через строку подписки, чтобы узнать, есть ли у клиента подписка silver или gold, затем установите его в поле subscription_tier

class subscription_tire_set(models.Model):
    _inherit = 'sale.subscription'

    subscription_tier = fields.Char(string='Subscription Tier',readonly=True)

    @api.depends('recurring_invoice_line_ids.product_id')
    def _compute_release_to_pay(self):
        for n_subscription in self:
            result = None
            for n_subscription_line in n_subscription.recurring_invoice_line_ids:
                if any(n_subscription_line.product_id) == 'gold':
                    
                    result = 'gold'
                    break
                else:
                    result = 'not'

        subscription_tier = result

Я, вероятно, делаю что-то ужасное неправильно

также появляется это сообщение при попытке открыть любого клиента в подписке

Что-то пошло не так! sale.subscription(10,).subscription_tier

Заранее благодарю за помощь.

Что у меня сработало:

  result = None

  for n_subscription_line in n_subscription.recurring_invoice_line_ids:
                if n_subscription_line.product_id.name == 'gold'
                    result = 'gold'

                    # break

                else:
                    result

  n_subscription.subscription_tier = result 

1 Ответ

1 голос
/ 09 мая 2020

Это не работает, потому что в последней строке вы объявляете переменную с именем subscription_tier и устанавливаете ее значение на result, вы должны назначить поле result на subscription_tier записи n_subscription:

@api.depends('recurring_invoice_line_ids.product_id')
def _compute_release_to_pay(self):
    for n_subscription in self:
        # Your code
        n_subscription.subscription_tier = result

Изменить:

любое вернет True или False и ваше выражение any(n_subscription_line.product_id) == 'gold' всегда будет оцениваться как False

...