To solve this problem, we first need to define the decision variables, objective function, and constraints.

Let's denote:
- \(M\) as the number of servings of milk the patient should drink.
- \(C\) as the number of servings of cheese the patient should eat.

The objective is to minimize the total cost. Given that a serving of milk costs $2 and a serving of cheese costs $4, the objective function can be represented as:
\[ \text{Minimize:} \quad 2M + 4C \]

The constraints are based on the nutritional requirements:
1. The patient must get at least 100 grams of calcium per day. Given that one serving of milk contains 10 grams of calcium and one serving of cheese contains 8 grams, we have:
\[ 10M + 8C \geq 100 \]
2. The patient must get at least 80 grams of Vitamin D per day. With one serving of milk containing 5 grams of Vitamin D and one serving of cheese containing 6 grams, we get:
\[ 5M + 6C \geq 80 \]

Additionally, \(M\) and \(C\) should be non-negative since the patient cannot consume a negative number of servings.

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

```python
from gurobipy import *

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

# Define variables
M = m.addVar(vtype=GRB.CONTINUOUS, name="Milk_Servings")
C = m.addVar(vtype=GRB.CONTINUOUS, name="Cheese_Servings")

# Set the objective function
m.setObjective(2*M + 4*C, GRB.MINIMIZE)

# Add constraints
m.addConstr(10*M + 8*C >= 100, "Calcium_Requirement")
m.addConstr(5*M + 6*C >= 80, "VitaminD_Requirement")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Milk servings: {M.x}")
    print(f"Cheese servings: {C.x}")
    print(f"Total cost: ${2*M.x + 4*C.x:.2f}")
else:
    print("No optimal solution found")
```