Multi- Knapsack problem variation
The simplest approach is to formulate this  as an instance of integer lienar programming.  You have zero-or-one variables $x_{i,j}$, where $x_{i,j}=1$ means that item $i$ is placed into knapsack $j$.  Then all of your constraints can be straightforwardly expressed as linear inequalities on these variables.