我目前正在顯示未預約的所有日期。
from datetime import date, timedelta
num_days = 5
start_date = date.today()
timeframe = [start_date timedelta(days=d) for d in range(num_days)]
exclude = list(Appointment.objects.values_list("start_appointment__date", flat=True).distinct())
set(timeframe) - set(exclude)
任命模型
class Appointment(models.Model):
user = models.ForeignKey(Account, on_delete=models.CASCADE)
seat = models.ForeignKey(Seat, on_delete=models.SET_NULL, null=True)
work = models.ManyToManyField(Therapy, related_name='work', verbose_name=_('Work'), blank=True)
start_appointment = models.DateTimeField(default=timezone.now, blank=True)
end_appointment = models.DateTimeField(default=timezone.now, blank=True)
例如,我有預約:
[datetime.date(2021, 12, 8), datetime.date(2021, 12, 7), datetime.date(2021, 12, 7), datetime.date(2021, 12, 7)]
和未預訂的日期:
{datetime.date(2021, 12, 10), datetime.date(2021, 12, 9), datetime.date(2021, 12, 11)}
我還想顯示未預訂日期的可用時間,時間間隔為上午 11:00 至下午 21:00:。
當前的實作可以實作嗎?如果是,我怎么能做到這一點?如果沒有,您能否建議另一種方式?
謝謝
uj5u.com熱心網友回復:
從提供的資訊很難判斷。
- 資料庫模型是什么樣的
- 什么是“約會”?
- “交易”是一組“約會”,還是一組時間段?
- 假設“交易”是一組時間段,您如何知道它們是否已被預訂?如果您使用的是布爾標志,為什么不過濾那個標志呢?
親切的問候//S
uj5u.com熱心網友回復:
如果您需要顯示可用時間,我建議將您的回復按日期分開,因此如果您有像 datetime(2021, 12, 8) 這樣的一天,并且您想顯示上午 11 點到晚上 21 點之間的時間,您可以使用以下內容:
from datetime import date, datetime, time
date_of_reference = datetime(2021, 12, 8, 0, 0) #your the object of database
initial_time = datetime.combine(date_of_reference.date(), time(11, 0))
final_time = datetime.combine(date_of_reference.date(), time(21,0))
reserved_times = [datetime(2021, 12, 8, 11, 0), datetime(2021, 12, 8, 15, 0)] #reserved_times from database here
hours_between = [datetime.combine(date_of_reference.date(), time(hour initial_time.hour, 0)) for hour in range(((final_time - initial_time).seconds // 3600) 1)]
avaliable_hours = [hour for hour in hours_between if hour not in reserved_times]
在您的代碼中將類似于
from datetime import datetime, timedelta
from .models import Appointment
# views
def check_available_hours(request):
day_request = request.GET.get('day','') #day in format yyyy-MM-dd
date_of_reference = datetime.strptime(day_request, "%Y-%m-%d")
initial_date_time = date_of_reference
final_date_time = date_of_reference timedelta(hours=23)
appointments_of_day = Appointment.objects.filter(
start_appointment__gte=initial_date_time,
start_appointment__lte=final_date_time
)
reserved_times = [
appointment.start_appointment timedelta(hours=i) for appointment in appointments_of_day for i in range((appointment.end_appointment - appointment.start_appointment).seconds//3600)]
# same as above but more understandable
# for appointment in appointments_of_day:
# for i in range((appointment.end_appointment - appointment.start_appointment)//3600):
# reserved_times.append(appointment.start_appointment timedelta(hours=i))
hours_between = [initial_date_time timedelta(hours=hour) for hour in range(((initial_date_time - final_date_time).seconds // 3600) 1)]
avaliable_hours = [hour for hour in hours_between if hour not in reserved_times]
return render(request, "name_template.html", {"hours": avaliable_hours})
如果您的約會沒有僅以小時為單位的持續時間,則您必須控制一天中的分鐘數而不是上面示例中的小時數
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375878.html
標籤:姜戈 列表 约会时间 django-queryset
