私はクライアントがサービスの予約をすることができる小さな予約アプリケーションを作成しました。また、特定の日付に検索するためのフォーム検索も行っています。フラスカで予約可能なすべてのユーザーを並べ替えるには?
結果は、利用可能なすべてのユーザーである必要があります。ただし、そのうちの1人がクライアントによって特定の日付にビジー状態である場合を除きます。
は、ここに私のmodels.pyです:
class User(db.Model, UserMixin):
__tablename__ = 'user'
id = db.Column(db.Integer(), primary_key=True)
public_id = db.Column(db.String(50), default=uuid.uuid4)
name = db.Column(db.String())
appointments = db.relationship('Appointment', backref='user', passive_deletes=True, lazy='dynamic')
class Appointment(db.Model):
id = db.Column(db.Integer(), primary_key=True)
public_id = db.Column(db.String(50), default=uuid.uuid4)
start_time = db.Column(db.DateTime(), default=datetime.utcnow)
end_time = db.Column(db.DateTime(), default=datetime.utcnow)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE'))
はここに私のコードです:私は何も得る結果で
from datetime import timedelta
from dateutil.parser import parse
date_time = parse(request.form.get('datetime'))
end_time = date_time + timedelta(minutes=20)
overlapping = db.session.query(Appointment).filter(
not_(
or_(Appointment.start_time > end_time,
Appointment.end_time < date_time)))
overlapping.count() # if overlapping returns > 0 so the client can't book
# Here i am joining the two tables so i can get the available users on that date
results = User.query.join(Appointment, Appointment.user_id == User.id).filter(
Appointment.start_time > end_time).filter(
Appointment.end_time < date_time).all()
。
ご意見ください!
変数 'date'とは何ですか? start_timeはend_timeよりも大きいはずですか?私はその部分を本当に理解していません。 – Jonathan
私は最初のスニペットで質問を更新しました。選択した時刻がデータベースの日付時刻の間にあるかどうかを確認しようとしています。そうであれば、ユーザーが選択した日付がビジーでなければなりません。 – swordfish
コードの2番目のスニペットでは、私は忙しいもの以外のすべての他のユーザーを取得しようとしています。 – swordfish