$ python -c " from app import create_app from app.models import Category app = create_app() with app.app_context(): categories = Category.query.all() print(f'📋 Found {len(categories)} categories:') for cat in categories: print(f' ID:{cat.id} - {cat.name}') " 📋 Found 23 categories: ID:1 - Carpentry ID:2 - Painting ID:3 - Tiling ID:4 - Landscaping ID:5 - General Labour ID:6 - Plumbing ID:7 - Bricklaying ID:8 - Concreting ID:9 - Plastering ID:10 - Flooring ID:11 - Formwork Carpentry ID:12 - Electrical ID:13 - Roofing ID:14 - Scaffolding ID:15 - Demolition ID:16 - Excavation ID:17 - HVAC ID:18 - Air Conditioning ID:19 - Steelfixing ID:20 - Crane Operation ID:21 - High Voltage Electrical ID:22 - Asbestos Removal ID:23 - Explosive Works ~/workspace$ grep -A 10 -B 5 "category" app/routes.py if request.method == 'POST': try: # Get form data title = request.form.get('title', '').strip() description = request.form.get('description', '').strip() category_id = request.form.get('category_id', type=int) location = request.form.get('location', '').strip() budget_min = request.form.get('budget_min') budget_max = request.form.get('budget_max') hourly_rate = request.form.get('hourly_rate') whs_requirements = request.form.get('whs_requirements', '').strip() white_card_required = 'white_card_required' in request.form insurance_required = 'insurance_required' in request.form # Validation errors = [] if not title: errors.append('Job title is required') if not description: errors.append('Job description is required') if not category_id: errors.append('Job category is required') if not location: errors.append('Job location is required') # Validate category exists if category_id: category = Category.query.get(category_id) if not category or not category.is_active: errors.append('Invalid job category selected') # Convert budget/rate to Decimal if provided budget_min_decimal = None budget_max_decimal = None hourly_rate_decimal = None try: if budget_min: budget_min_decimal = Decimal(str(budget_min)) if budget_min_decimal < 0: -- # Create new job job = Job( title=title, description=description, contractor_id=current_user.id, category_id=category_id, location=location, budget_min=budget_min_decimal, budget_max=budget_max_decimal, hourly_rate=hourly_rate_decimal, whs_requirements=whs_requirements or f"Category: {category.name}. Risk Level: {category.whs_risk_level}.", white_card_required=white_card_required, insurance_required=insurance_required, status='open' ) db.session.add(job) db.session.commit() flash('Job posted successfully!', 'success') return redirect(url_for('job_details', job_id=job.id)) ~/workspace$ grep -A 5 -B 5 "category" app/templates/jobs/post.html