To solve the optimization problem described, we need to formulate it as a linear programming problem. The goal is to maximize exposure (viewers and readers) from two types of media (social media adverts and magazine covers) within a budget constraint of $500,000.

Let's denote:
- \(x_1\) as the number of social media adverts.
- \(x_2\) as the number of magazine covers.

The objective function to maximize exposure is given by:
\[ \text{Maximize} \quad 100,000x_1 + 54,000x_2 \]

Subject to the constraints:
1. Budget constraint: The total cost must not exceed $500,000.
   - Each social media advert costs $3,000.
   - Each magazine cover costs $6,000.
   \[ 3,000x_1 + 6,000x_2 \leq 500,000 \]
2. Social media posts constraint: At least 10 but at most 20 social media posts.
   \[ 10 \leq x_1 \leq 20 \]
3. Magazine covers constraint: At least 24 magazine covers.
   \[ x_2 \geq 24 \]

Since \(x_1\) and \(x_2\) represent the number of social media adverts and magazine covers, respectively, they must be non-negative integers.

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Film_Promotion")

# Define variables
x1 = m.addVar(vtype=GRB.INTEGER, name="Social_Media_Adverts", lb=10, ub=20)
x2 = m.addVar(vtype=GRB.INTEGER, name="Magazine_Covers", lb=24)

# Objective function: Maximize exposure
m.setObjective(100000*x1 + 54000*x2, GRB.MAXIMIZE)

# Budget constraint
m.addConstr(3000*x1 + 6000*x2 <= 500000, "Budget_Constraint")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Social Media Adverts: {x1.x}")
    print(f"Magazine Covers: {x2.x}")
    print(f"Maximum Exposure: {m.ObjVal}")
else:
    print("No optimal solution found.")
```