В настоящее время у меня есть приложение, которое пишет сообщения и задает дату и время по умолчанию при написании сообщения. И новое сообщение, и сообщение редактирования редактируют один и тот же html create-post. html.
Я бы хотел, чтобы была возможность редактирования этого времени с помощью виджета выбора даты, как показано в этом вопросе: DatePickerWidget с Flask, Flask -Admin и WTforms
Я изо всех сил пытаюсь адаптировать мою текущую настройку без сбоя приложения.
В идеале:
- При создании нового сообщения виджет выбора даты показывает текущее время как стандартное (но это можно изменить, если требуется)
- При редактировании сообщения средство выбора даты показывает исходное время даты из БД. - но это может быть отредактировано при необходимости
- Формат: гггг-мм-дд чч: мм
Спасибо за любую помощь, он очень ценится
rout.py
@app.route("/post/new", methods=['GET', 'POST'])
# @login_required
def new_post():
form = PostForm()
if form.validate_on_submit():
post = Post(title=form.title.data,
description=form.description.data,
status=form.status.data,
priority=form.priority.data,
assigned_to=form.assigned_to.data,
reported_by=form.reported_by.data)
db.session.add(post)
db.session.commit()
flash('Your post has been created!', 'success')
return redirect(url_for('home'))
return render_template('create_post.html', title='New Post', form=form,
legend='New Post')
@app.route("/post/<int:post_id>")
def post(post_id):
post = Post.query.get_or_404(post_id)
return render_template('post.html', title=post.title, post=post)
@app.route("/post/<int:post_id>/update", methods=['GET', 'POST'])
# @login_required
def update_post(post_id):
post = Post.query.get_or_404(post_id)
# if post.author != current_user:
# abort(403)
form = PostForm()
if form.validate_on_submit():
post.title = form.title.data
post.description = form.description.data
# post.date_posted = form.date_posted.data,
post.date_posted = form.date_posted.data.strftime('%Y-%m-%d')
post.status = form.status.data
post.priority = form.priority.data
post.assigned_to = form.assigned_to.data
post.reported_by = form.reported_by.data
db.session.commit()
flash('Your post has been updated!', 'success')
return redirect(url_for('home', post_id=post.id))
elif request.method == 'GET':
form.title.data = post.title
form.description.data = post.description
form.date_posted = post.date_posted
form.status.data = post.status
form.priority.data = post.priority
form.assigned_to.data = post.assigned_to
form.reported_by.data = post.reported_by
# form.date_posted.data = post.date_posted
return render_template('create_post.html', title='Update Post',
form=form, legend ='Update Post')
forms.py
from wtforms.fields.html5 import DateTimeField
status_options = [('ongoing', 'ongoing'), ('completed', 'completed')]
priority_options = [('moderate', 'moderate'),('high', 'high'),('low','low')]
class PostForm(FlaskForm):
title = StringField('Title', validators=[DataRequired()])
description = TextAreaField('Description')
# date_posted = DateTimeField('Date and Time', format='%Y-%m-%d %H:%M')
status = SelectField('Status',choices = status_options)
priority = SelectField('Priority',choices = priority_options)
assigned_to = StringField('Assigned To')
reported_by = StringField('Reported By')
submit = SubmitField('Save')
models.py
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
description = db.Column(db.Text, nullable=False)
status = db.Column(db.String(100), nullable=False)
priority = db.Column(db.String(100), nullable=False)
assigned_to = db.Column(db.String(100), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
reported_by = db.Column(db.String(100), nullable=False)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"
create_post. html
{% block content %}
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<div class="form-group" align="right">
{{ form.submit(class="btn btn-outline-info white") }}
</div>
<fieldset class="form-group">
<legend class="border-bottom mb-4">{{ legend }}</legend>
<div class="form-group">
{{ form.title.label(class="form-control-label") }}
{% if form.title.errors %}
{{ form.title(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.title.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.title(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">
{{ form.description.label(class="form-control-label") }}
{% if form.description.errors %}
{{ form.description(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.description.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.description(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">
{{ form.status.label(class="form-control-label") }}
{% if form.status.errors %}
{{ form.status(class="form-control form-control-lg is-invalid") }}
{# {{ form.status(rows=2, multiple=True) }} #}
<div class="invalid-feedback">
{% for error in form.status.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.status(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">
{{ form.priority.label(class="form-control-label") }}
{% if form.priority.errors %}
{{ form.priority(class="form-control form-control-lg is-invalid") }}
{# {{ form.priority(rows=2, multiple=True) }} #}
<div class="invalid-feedback">
{% for error in form.priority.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.priority(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">
{{ form.assigned_to.label(class="form-control-label") }}
{% if form.assigned_to.errors %}
{{ form.assigned_to(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.assigned_to.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.assigned_to(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">
{{ form.reported_by.label(class="form-control-label") }}
{% if form.reported_by.errors %}
{{ form.reported_by(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.reported_by.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.reported_by(class="form-control form-control-lg") }}
{% endif %}
</div>
</fieldset>
<div class="form-group" align="right">
{{ form.submit(class="btn btn-outline-info white") }}
</div>
<p align="right"><a class="nav-item nav-link" href="{{ url_for('home') }}"><small>Return without save</small></a> <br></p>
</form>
</div>
{% endblock content %}
