Соответствующий код:
Код: Выделить всё
model.py
class Ad(db.Model):
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(50), nullable=False)
body = db.Column(db.Text, nullable=False)
subcategory_id = db.Column(db.Integer, db.ForeignKey('subcategory.id'), nullable=False)
Ad_type = db.Column(db.String(50), nullable=False)
photos = db.relationship('Photo',cascade='all, delete-orphan')
__mapper_args__ = {
'polymorphic_identity': 'ad',
"polymorphic_on": Ad_type
}
class HousingAd(Ad):
__tablename__ = 'housing_ad'
rent = db.Column(db.Float)
rent_period = db.Column(db.Enum('day', 'week', 'month'))
type = db.Column(db.Enum('room', 'house', 'homestay', 'vacation', 'other'))
__mapper_args__ = {
'polymorphic_identity': 'housing',
}
class ForSaleAd(Ad):
__tablename__ = 'for_sale_ad'
price = db.Column(db.Float)
brand = db.Column(db.String(50))
condition = db.Column(db.Enum('new','used','deficiency'))
__mapper_args__ = {
'polymorphic_identity': 'for_sale',
}
class JobAd(Ad):
__tablename__ = 'job_ad'
industry = db.Column(db.String(50))
compensation = db.Column(db.String(50))
__mapper_args__ = {
'polymorphic_identity': 'job',
}
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
filename = db.Column(db.String(255), nullable=False)
ad_id = db.Column(db.Integer, db.ForeignKey('ad.id'))
ad_type = db.Column(db.Integer, db.ForeignKey('category.id'))
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True, nullable=False)
subcategory = db.relationship('Subcategory')
class Subcategory(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50),nullable=False)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False)
ad = db.relationship('Ad')
Код: Выделить всё
auth.py
@auth.route("/post-ads//", methods=['GET','POST'])
@login_required
def post_ad(category,subcategory):
if request.method == 'POST':
subject = request.form.get('subject')
body = request.form.get('body')
photos =request.files.getlist('photo')
if category == 'Housing':
housingAd = HousingAd(subject=subject, body=body, Ad_type=category, user_id=userId, subcategory_id=subcategoryId)
db.session.add(housingAd)
db.session.commit()
ad_id=housingAd.id
if category == 'For Sale':
pass
if category == 'Jobs':
pass
ad_type = Category.query.filter_by(name=category).first().id
createPhoto(photos,ad_id,ad_type)
flash('post ad successfully!','success')
return redirect(url_for('auth.home'))
def createPhoto(photos,ad_id,ad_type):
uploads_folder = path.join(getcwd(),Config.UPLOAD_FOLDER)
if not path.exists(uploads_folder):
makedirs(uploads_folder)
if photos:
for photo in photos:
if photo and photo.filename:
photo.save(path.join(uploads_folder, photo.filename))
new_photo = Photo(filename=photo.filename,ad_id=ad_id,ad_type=ad_type)
db.session.add(new_photo)
db.session.commit()
else:
flash('No file selected or file is empty.','danger')
Подробнее здесь: https://stackoverflow.com/questions/790 ... sqlalchemy