合约列表按品种分节点展示

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-26 10:02:09 +08:00
parent 91840ca2ca
commit e155682b5f
2 changed files with 77 additions and 31 deletions
+25 -3
View File
@@ -24,11 +24,33 @@ def get_active_contracts(db: Session) -> list[str]:
@router.get("/", response_class=HTMLResponse)
def contract_index(request: Request, db: Session = Depends(get_db)):
active_contracts = get_active_contracts(db)
from app.models import Product
# Build product → contracts mapping, ordered by product code
products = (
db.query(Product)
.order_by(Product.code)
.all()
)
product_groups = []
all_codes = []
for prod in products:
codes = [
c.code for c in prod.contracts if c.is_active
]
if codes:
product_groups.append({
"code": prod.code,
"name": prod.name,
"exchange": prod.exchange,
"contracts": codes,
})
all_codes.extend(codes)
latest = (
db.query(DailyBar)
.filter(DailyBar.contract.in_(active_contracts))
.filter(DailyBar.contract.in_(all_codes))
.order_by(DailyBar.date.desc())
.all()
)
@@ -42,7 +64,7 @@ def contract_index(request: Request, db: Session = Depends(get_db)):
template.render(
request=request,
active_nav="contracts",
contracts=active_contracts,
product_groups=product_groups,
contract_bars=contract_bars,
)
)