diff --git a/modules/account/account.py b/modules/account/account.py index b36d3cb01c..bd35dfd102 100644 --- a/modules/account/account.py +++ b/modules/account/account.py @@ -2329,7 +2329,8 @@ class GeneralLedgerLine(DescriptionOriginMixin, ModelSQL, ModelView): move = fields.Many2One('account.move', 'Move') date = fields.Date('Date') - account = fields.Many2One('account.general_ledger.account', 'Account') + account = fields.Many2One( + 'account.general_ledger.account', 'Account', required=True) party = fields.Many2One('party.party', 'Party', states={ 'invisible': ~Eval('party_required', False), diff --git a/modules/account_move_line_grouping/account.py b/modules/account_move_line_grouping/account.py index c74ac09b43..51523f476d 100644 --- a/modules/account_move_line_grouping/account.py +++ b/modules/account_move_line_grouping/account.py @@ -40,7 +40,8 @@ class MoveLine(metaclass=PoolMeta): class MoveLineGroup(MoveLineMixin, ModelSQL, ModelView): __name__ = 'account.move.line.group' - move = fields.Many2One('account.move', "Move", readonly=True) + move = fields.Many2One( + 'account.move', "Move", readonly=True, required=True) account = fields.Many2One( 'account.account', "Account", readonly=True, context={ diff --git a/modules/account_statement/statement.py b/modules/account_statement/statement.py index 07c7bb708f..99566d4615 100644 --- a/modules/account_statement/statement.py +++ b/modules/account_statement/statement.py @@ -1086,7 +1086,8 @@ del _states class LineGroup(ModelSQL, ModelView): __name__ = 'account.statement.line.group' _rec_name = 'number' - statement = fields.Many2One('account.statement', 'Statement') + statement = fields.Many2One( + 'account.statement', 'Statement', required=True) journal = fields.Function(fields.Many2One('account.statement.journal', 'Journal'), 'get_journal', searcher='search_journal') number = fields.Char('Number') diff --git a/modules/currency/currency.py b/modules/currency/currency.py index d4f17bc9c9..1be0ef371d 100644 --- a/modules/currency/currency.py +++ b/modules/currency/currency.py @@ -254,7 +254,7 @@ class CurrencyRate(ModelSQL, ModelView): ], help="The floating exchange rate used to convert the currency.") currency = fields.Many2One('currency.currency', 'Currency', - ondelete='CASCADE', + required=True, ondelete='CASCADE', help="The currency on which the rate applies.") @classmethod diff --git a/modules/party/party.py b/modules/party/party.py index 0b40ffdeff..9af034753c 100644 --- a/modules/party/party.py +++ b/modules/party/party.py @@ -819,7 +819,7 @@ class Identifier(sequence_ordered(), DeactivableMixin, ModelSQL, ModelView): @classmethod def __setup__(cls): super().__setup__() - cls.__access__.update(['party', 'address']) + cls.__access__.add('party') @classmethod def __register__(cls, module_name): diff --git a/modules/product_image/product.py b/modules/product_image/product.py index 4cf419b49b..01dee6980c 100644 --- a/modules/product_image/product.py +++ b/modules/product_image/product.py @@ -237,7 +237,7 @@ class Image(ImageMixin, sequence_ordered(), ModelSQL, ModelView, MatchMixin): @classmethod def __setup__(cls): super().__setup__() - cls.__access__.update(['product', 'template']) + cls.__access__.add('template') def _store_cache(self, size, image): cache = super()._store_cache(size, image) diff --git a/modules/product_kit/product.py b/modules/product_kit/product.py index 27dccf8544..4274fbb0f7 100644 --- a/modules/product_kit/product.py +++ b/modules/product_kit/product.py @@ -245,7 +245,7 @@ class Component(ComponentMixin, ModelSQL, ModelView): @classmethod def __setup__(cls): super().__setup__() - cls.__access__.update(['parent_template', 'parent_product']) + cls.__access__.add('parent_template') @fields.depends( 'parent_product', '_parent_parent_product.template') diff --git a/trytond/trytond/ir/action.py b/trytond/trytond/ir/action.py index 2f9223296d..e577742f31 100644 --- a/trytond/trytond/ir/action.py +++ b/trytond/trytond/ir/action.py @@ -186,7 +186,7 @@ class ActionKeyword(ModelSQL, ModelView): ('graph_open', 'Open Graph'), ], string='Keyword', required=True) model = fields.Reference('Model', selection='models_get') - action = fields.Many2One('ir.action', 'Action', + action = fields.Many2One('ir.action', 'Action', required=True, ondelete='CASCADE') groups = fields.Function( fields.Many2Many('res.group', None, None, "Groups"), @@ -973,7 +973,7 @@ class ActionActWindowView( ('model', '=', Eval('model', None)), ]) act_window = fields.Many2One('ir.action.act_window', 'Action', - ondelete='CASCADE') + required=True, ondelete='CASCADE') model = fields.Function(fields.Char("Model"), 'on_change_with_model') @classmethod diff --git a/trytond/trytond/tests/test_tryton.py b/trytond/trytond/tests/test_tryton.py index 63ba0d0fa0..d0d5008e7a 100644 --- a/trytond/trytond/tests/test_tryton.py +++ b/trytond/trytond/tests/test_tryton.py @@ -416,6 +416,9 @@ class ModuleTestCase(_DBTestCase): msg="Wrong __access__ '%s' for %s" % ( field_name, mname)) field = Model._fields[field_name] + self.assertTrue(field.required, + msg=("Field '%s' of '%s' must be required in order to " + "be used in __access__") % (field_name, mname)) Target = field.get_target() self.assertTrue( Target,