To solve this problem, we first need to define the variables and the objective function. Let's denote the number of lemons as \(L\) and the number of bananas as \(B\). The profit from selling one lemon is $2 (selling price - cost), and the profit from selling one banana is $1 (selling price - cost).

Given:
- Cost of a lemon: $3
- Cost of a banana: $1.5
- Selling price of a lemon: $3 + $2 = $5
- Selling price of a banana: $1.5 + $1 = $2.5
- Maximum budget for lemons and bananas: $1000
- Minimum lemons sold per month: 250
- Maximum lemons sold per month: 300
- Bananas sold are at most a third of the lemons sold

The objective is to maximize profit \(P = 2L + B\), subject to the constraints:
1. Budget constraint: \(3L + 1.5B \leq 1000\)
2. Minimum lemons sold: \(L \geq 250\)
3. Maximum lemons sold: \(L \leq 300\)
4. Bananas sold are at most a third of the lemons sold: \(B \leq \frac{1}{3}L\)

Now, let's translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

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

# Define variables
L = m.addVar(vtype=GRB.INTEGER, name="lemons")
B = m.addVar(vtype=GRB.INTEGER, name="bananas")

# Objective function: Maximize profit
m.setObjective(2*L + B, GRB.MAXIMIZE)

# Constraints
m.addConstr(3*L + 1.5*B <= 1000, "budget_constraint")
m.addConstr(L >= 250, "min_lemons_sold")
m.addConstr(L <= 300, "max_lemons_sold")
m.addConstr(B <= (1/3)*L, "bananas_vs_lemons")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Lemons to sell: {L.x}")
    print(f"Bananas to sell: {B.x}")
    print(f"Maximum profit: {m.objVal}")
else:
    print("No optimal solution found")
```