【发布时间】:2021-05-08 15:47:01
【问题描述】:
我有一个包含食谱和配料的数据库:
class Recipe(db.Model):
id = db.Column(db.Integer, primary_key=True)
ingredient = db.relationship('Ingredient', backref='ingredientrecipe', lazy=True)
recipe_name = db.Column(db.String(100), nullable=False)
class Ingredient(db.Model):
id = db.Column(db.Integer, primary_key=True)
recipe_id = db.Column(db.Integer, db.ForeignKey('recipe.id'), nullable=False)
name = db.Column(db.String(100))
成分列在 html 表格中。 (为了清楚起见,我没有包含模态的完整 Bootstrap html,尽管它表现出一些奇怪的行为,尽管它具有唯一的 id)
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
</tr>
</thead>
<tbody>
{% for ingredient in ingredient.items %}
<tr class="ingredient">
<th scope="row"> {{ hop.id }} </th>
<td>{{ ingredient.name }}</td>
<td>
<modal html here>
<form action="{{ url_for('deleteingredient', ingredient_id=ingredient.id, recipe_id=ingredient.recipe_id) }}" method="POST">
<input class="btn btn-danger" type="submit" value="Delete">
</form>
</modal html>
{% endfor %}
</tr>
</tbody>
</table>
这是我的删除路线:
@app.route('/recipe/<int:ingredient_id>/delete', methods=['POST'])
@login_required
def deleteingredient(ingredient_id):
recipe = Recipe.query.get_or_404(recipe_id)
ingredient = Ingredient.query.filter_by(ingredientrecipe=recipe)
if recipe.author != current_user:
abort(403)
db.session.delete(ingredient)
db.session.commit()
flash('Your ingredient has been deleted', 'success')
我不会发布当我尝试执行此操作时出现的错误消息,因为我认为它不相关(它是与 recipe 相关的不同表上的 (sqlite3.IntegrityError) NOT NULL constraint failed)并且可能会混淆问题。
想要的行为是转到单个食谱页面,单击成分列表中单行上的按钮,以弹出模式,并从数据库中删除单个成分行。
我很确定这是因为我没有理解数据库结构背后的逻辑以及路由如何与相关表一起工作。任何有助于减少我的脑损伤的帮助将不胜感激!
【问题讨论】: