To solve the optimization problem described, we first need to identify the decision variables, objective function, and constraints.

- Decision Variables:
  - \(x_1\): Number of RC drones made.
  - \(x_2\): Number of model cars made.

- Objective Function:
  - Maximize profit: \(50x_1 + 90x_2\).

- Constraints:
  - Wood constraint: \(7x_1 + 4x_2 \leq 200\).
  - Paint constraint: \(30x_1 + 20x_2 \leq 900\).
  - Non-negativity constraints: \(x_1, x_2 \geq 0\), since the number of items made cannot be negative.

Given these components, we can formulate the problem as a linear programming model and solve it using Gurobi in Python. The code below represents this formulation and solves for the optimal production quantities.

```python
from gurobipy import *

# Create a new model
model = Model("Toys_Profit_Maximization")

# Define decision variables
x1 = model.addVar(vtype=GRB.CONTINUOUS, name="RC_Drones")
x2 = model.addVar(vtype=GRB.CONTINUOUS, name="Model_Cars")

# Set the objective function: Maximize profit
model.setObjective(50*x1 + 90*x2, GRB.MAXIMIZE)

# Add constraints
model.addConstr(7*x1 + 4*x2 <= 200, "Wood_Constraint")
model.addConstr(30*x1 + 20*x2 <= 900, "Paint_Constraint")

# Optimize the model
model.optimize()

# Print results
if model.status == GRB.OPTIMAL:
    print(f"Optimal Production - RC Drones: {x1.x}, Model Cars: {x2.x}")
    print(f"Maximum Profit: ${model.objVal:.2f}")
else:
    print("Model is infeasible or unbounded.")
```