From 37ae72ceeffd634bd079e78f909ccad0fb9ad5ac Mon Sep 17 00:00:00 2001 From: 3err0 Date: Tue, 21 Jan 2025 23:44:54 +0800 Subject: [PATCH] Amenities --- models.py | 10 ++++++++++ routes.py | 13 ++++++++++--- templates/create_listing.html | 15 +++++++++++++++ templates/view.html | 9 +++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/models.py b/models.py index c4f32cf..21ced21 100644 --- a/models.py +++ b/models.py @@ -30,6 +30,7 @@ class Listing(db.Model): rooms = db.Column(db.Integer, nullable=False, default=1) bathrooms = db.Column(db.Integer, nullable=False, default=1) beds = db.Column(db.Integer, nullable=False, default=1) + amenities = db.relationship('Amenities', secondary='listing_amenities', backref='listings', lazy='dynamic') PROPERTY_TYPES = { 'house': 'Дом', @@ -39,6 +40,15 @@ class Listing(db.Model): 'hotel': 'Гостиница' } +class Amenities(db.Model): + id = db.Column(db.Integer, primary_key=True) + amenity = db.Column(db.String(100), nullable=False, unique=True) + +listing_amenities = db.Table('listing_amenities', + db.Column('listing_id', db.Integer, db.ForeignKey('listing.id'), primary_key=True), + db.Column('amenity_id', db.Integer, db.ForeignKey('amenities.id'), primary_key=True) +) + class Image(db.Model): id = db.Column(db.Integer, primary_key=True) url = db.Column(db.String(300), nullable=False) diff --git a/routes.py b/routes.py index 8c1ad56..cc5fdb9 100644 --- a/routes.py +++ b/routes.py @@ -1,7 +1,7 @@ from flask import render_template, request, redirect, url_for from flask_login import login_user, login_required, logout_user, current_user from app import app, db, bcrypt, login_manager -from models import User, Listing, Booking, Image, Document +from models import User, Listing, Booking, Image, Document, Amenities from datetime import datetime from utils import generate_password, send_email, save_document @@ -98,6 +98,7 @@ def create_listing(): if not current_user.is_host: return redirect(url_for('home')) + amenities_list = Amenities.query.all() if request.method == 'POST': title = request.form['title'] description = request.form['description'] @@ -110,6 +111,7 @@ def create_listing(): rooms = request.form['rooms'] beds = request.form['beds'] bathrooms = request.form['bathrooms'] + selected_amenities = request.form.getlist('amenities') listing = Listing(title=title, description=description, price=price, @@ -119,6 +121,10 @@ def create_listing(): latitude=latitude, longitude=longitude, guests=guests, rooms=rooms, beds=beds, bathrooms=bathrooms) + for amenity_id in selected_amenities: + amenity = Amenities.query.get(int(amenity_id)) + if amenity: + listing.amenities.append(amenity) db.session.add(listing) db.session.flush() @@ -129,7 +135,7 @@ def create_listing(): db.session.commit() return redirect(url_for('dashboard')) - return render_template('create_listing.html', property_types=Listing.PROPERTY_TYPES) + return render_template('create_listing.html', property_types=Listing.PROPERTY_TYPES, amenities_list=amenities_list) @app.route('/booking/', methods=['GET', 'POST']) @login_required @@ -155,4 +161,5 @@ def booking(listing_id): def view_listing(listing_id): listing = Listing.query.get_or_404(listing_id) property_type_display = Listing.PROPERTY_TYPES.get(listing.property_type, 'Unknown') - return render_template('view.html', listing=listing, property_type_display=property_type_display) \ No newline at end of file + amenities = list(listing.amenities) + return render_template('view.html', listing=listing, property_type_display=property_type_display, amenities=amenities) \ No newline at end of file diff --git a/templates/create_listing.html b/templates/create_listing.html index 1fd8212..e5b47cd 100644 --- a/templates/create_listing.html +++ b/templates/create_listing.html @@ -29,6 +29,21 @@ {% endfor %} +
+ +
+ {% for amenity in amenities_list %} +
+
+ + +
+
+ {% endfor %} +
+
diff --git a/templates/view.html b/templates/view.html index 2e735a5..7fb0478 100644 --- a/templates/view.html +++ b/templates/view.html @@ -16,6 +16,15 @@

Bathrooms: {{ listing.bathrooms }}

Beds: {{ listing.beds }}

+ {% if amenities %} +

Additional Amenities:

+
    + {% for amenity in amenities %} +
  • {{ amenity.amenity }}
  • + {% endfor %} +
+ {% endif %} + Book This Listing
{% endblock %} \ No newline at end of file