To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. This involves defining variables for the quantities of RC drones and model cars to be produced, formulating the objective function that represents the total profit, and specifying the constraints based on the availability of wood and paint.

Let's define:
- $x_1$ as the number of RC drones to be made,
- $x_2$ as the number of model cars to be made.

The objective function, which is the total profit, can be represented as:
\[50x_1 + 90x_2\]

The constraints are based on the availability of resources:
1. Wood constraint: $7x_1 + 4x_2 \leq 200$
2. Paint constraint: $30x_1 + 20x_2 \leq 900$
3. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

Thus, the symbolic representation of the problem is:
```json
{
  'sym_variables': [('x1', 'Number of RC drones'), ('x2', 'Number of model cars')],
  'objective_function': '50*x1 + 90*x2',
  'constraints': ['7*x1 + 4*x2 <= 200', '30*x1 + 20*x2 <= 900', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's write the Gurobi code in Python to solve this linear programming problem:

```python
from gurobipy import *

# Create a new model
m = Model("Toy_Problem")

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="RC_Drones", lb=0)
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="Model_Cars", lb=0)

# Set the objective function
m.setObjective(50*x1 + 90*x2, GRB.MAXIMIZE)

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

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"RC Drones: {x1.x}")
    print(f"Model Cars: {x2.x}")
    print(f"Total Profit: {m.objVal}")
else:
    print("No optimal solution found")
```