I found that a field could be made required based on the state of the record, using the state expression as follows:
'check_total': fields.float('Verification Total', digits_compute=dp.get_precision('Account'), readonly=True, states={'draft':[('readonly',False)]}),
where this is a field in the account_invoice table
I need to extend this behavior to use any other field, how can I achieve this.