Python 检查Flask应用程序中该用户的数据库中是否已存在日期

Python 检查Flask应用程序中该用户的数据库中是否已存在日期,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我的日期选择器,选择日期并将其成功保存在数据库中。 但是,我检查所选日期是否已存在于该用户的数据库中的验证似乎不起作用 我的逻辑是获取该用户的所有日期,并检查输入的表单日期是否存在于db列表中 请查找以下代码: 路线代码 @app.route('/timesheet', methods=['GET', 'POST']) @login_required def timesheet(): form = DateFrm() if form.validate_on_submit():

我的日期选择器,选择日期并将其成功保存在数据库中。 但是,我检查所选日期是否已存在于该用户的数据库中的验证似乎不起作用

我的逻辑是获取该用户的所有日期,并检查输入的表单日期是否存在于db列表中

请查找以下代码:

路线代码

@app.route('/timesheet', methods=['GET', 'POST'])
@login_required
def timesheet():
    form = DateFrm()
    if form.validate_on_submit():
        date=Date(date_comp=form.dt.data,date=current_user)
        db.session.add(date)
        db.session.commit()
        flash('Your Comp-off has been submited successfully','success')
        return redirect(url_for('hello'))

    return render_template('timesheet.html', form=form)

表格代码

class DateFrm(FlaskForm):
    dt = DateField('DatePicker', format='%Y-%m-%d')
    submit = SubmitField('Submit')

    def validate_date(self, dt):
        date = Date.query.filter_by(user_id=current_user.id).all()
        if dt.data in date:
            raise ValidationError(
                'Date has been already applied')

数据库代码

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


class User(db.Model,UserMixin):
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(20),unique=True,nullable=False)
    email=db.Column(db.String(120),unique=True,nullable=False)
    profile_pic=db.Column(db.String(20),nullable=False,default="defaultdp.jpg")
    password=db.Column(db.String(60),nullable=False)

    datatime=db.relationship('Date',backref='date',lazy=True)

    def __repr__(self):
        return f"User('{self.username}','{self.email}','{self.profile_pic}')"
class Date(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    date_comp=db.Column(db.DateTime(120),nullable=False)
    user_id=db.Column(db.Integer,db.ForeignKey('user.id'),nullable=False)

    def __repr__(self):
        return f"Date('{self.date_comp}')"

HTML代码

<div class="container">
<form action="#" method="POST">
    {{ form.hidden_tag() }}

    {% if form.dt.errors%}
        {{ form.dt(class="is-invalid") }} 
         <div class="invalid-feedback">
        {% for error in form.dt.errors %}
            <span style="color:red">{{ error }}</span>
        {% endfor %}
        </div>
    {% else %}
        {{ form.dt(class='datepicker') }}
    {% endif %} 
    {{form.submit(class_="btn")}}
</form>
</div>
{%endblock contents%}


{{form.hidden_tag()}}
{%if form.dt.errors%}
{{form.dt(class=“is invalid”)}
{%for form.dt.errors%}
{{error}}
{%endfor%}
{%else%}
{{form.dt(class='datepicker')}
{%endif%}
{{form.submit(class=“btn”)}
{%endblock内容%}

在将日期添加到
路由中的数据库之前,您没有验证日期。
基本上你需要在你的飞机上处理这个逻辑。在你给我打电话之前

db.session.add(date)
db.session.commit()
另外,在验证方法中,您正在获取
date=date.query.filter\u by(user\u id=current\u user.id).all()
。给定的语句将为您提供一个日期对象列表,现在您正在检查行中的内容

如果dt.data在日期中:


如果给定的日期(作为日期时间字段)存在于日期对象的列表中,该列表每次的计算结果均为
False
,则在您的模型中,您已将
date
定义为不是
日期字段
,而是包含其他属性的类,因此没有出现例外情况。

date=current\u user
??@roganjosh抱歉,我不明白您的意思。如果日期中的dt.data:
,我是否应该添加此条件而不是
?日期如何等于
当前用户
?。这是flask login中的一个对象。@roganjosh date等于我代码中当前用户的所有日期,如果是askOh,我在sql上尝试了此查询并得到了日期列表,所以在代码@roganjosh中尝试了