我正在尝试使用flask / python-anywhere创建一个卡路里计数器应用程序,其中一部分是制作下拉菜单供您选择。我希望用户能够看到食物名称,但是当他们提交食物时,我想将食物的calories添加到数据库中。
这是相关表的python代码:
class Post(db.Model):
__tablename__ = "posts"
id = db.Column(db.Integer, primary_key=True)
calories = db.Column(db.Integer)
timestamp = db.Column(db.DateTime, index=True, default=datetime.now)
consumer_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
consumer = db.relationship('User', foreign_keys=consumer_id)
class Food(db.Model):
__tablename__ = "foods"
id = db.Column(db.Integer, primary_key=True)
food_name = db.Column(db.String(200))
food_cal = db.Column(db.Integer)
这是页面的python代码:
@app.route("/", methods=["GET", "POST"])
@login_required
def index():
if request.method == "GET":
return render_template("main_page.html", foods=Food.query.all(), posts=Post.query.all(), timestamp=datetime.now())
if not current_user.is_authenticated:
return redirect(url_for('index'))
add_food = Post(calories=request.form["calories"], consumer=current_user)
db.session.add(add_food)
db.session.commit()
return redirect(url_for('index'))
这是我的html代码:
<div class="container">
{% for post in posts %}
<div class="row" style="margin-bottom: 1ex">
<div>
You added {{ post.calories }} calories
</div>
<div>
<small>
at
{% if post.timestamp %}
{{ post.timestamp.strftime("%A, %d %B %Y at %H:%M") }}
{% else %}
at an unknown time
{% endif %}
</small>
</div>
</div>
{% endfor %}
{% if current_user.is_authenticated %}
<div class="row">
<form action="." method="POST">
<div class="form-group">
<label for="foods">Food:</label>
<select class="form control" name="food_name">
{% for food in foods %}
<option value = "{{ food.food_name }}" selected>{{ food.food_name }}</option>
{% endfor %}
</select>
<input type="submit" class="btn btn-success" value="Add calories">
</div>
</form>
</div>
{% endif %}
</div><!-- /.container -->
为了澄清,我已经在“食物”表中添加了食物,但是我希望用户选择的食物在我的“帖子”表中另存为“卡路里”。在此先感谢:)
<option value = "{{ food.food_name }}" selected>{{ food.food_name }}</option>