Tôi đang cố gắng triển khai hệ thống lịch có khả năng lên lịch cho những người khác cho các cuộc hẹn. Hệ thống phải có khả năng ngăn chặn việc lập kế hoạch cho một người trong một cuộc hẹn khác hoặc trong thời gian không có mặt của họ.django calendar free/busy/availabilitty
Tôi đã xem xét tất cả các dự án lịch django hiện có mà tôi đã tìm thấy trên internet và không có dự án nào trong số này dường như được tích hợp sẵn (nếu tôi bỏ lỡ bằng cách nào đó, vui lòng cho tôi biết).
Có lẽ tôi chỉ cảm thấy mệt mỏi, nhưng cách duy nhất tôi có thể nghĩ là làm điều này có vẻ hơi lộn xộn một chút. Ở đây đi trong mã giả:
- khi người dùng cố gắng để tạo ra một cuộc hẹn mới, lấy start_time việc bổ nhiệm mới và END_TIME
- cho mỗi cuộc hẹn vào cùng ngày hôm đó, kiểm tra xem
- existing_start_time < NEW_START_TIME AND existing_end_time> new_start_time (là các cuộc hẹn mới bắt đầu thời gian giữa bất kỳ thời điểm bắt đầu và kết thúc cuộc hẹn hiện tại nào)
- existing_start_time < new_end_time AND existing_end_time> new_end_time (là các cuộc hẹn mới vi d thời gian ở giữa các cuộc hẹn hiện của sự khởi đầu và kết thúc)
- nếu không có đối tượng được tìm thấy, sau đó đi trước và thêm việc bổ nhiệm mới
Xét Django không có lọc dựa trên thời gian, điều này phải tất cả được thực hiện bằng cách sử dụng .extra() trên queryset.
Vì vậy, tôi hỏi nếu có cách nào tốt hơn. Một thủ thuật hoặc mô-đun pythonic hoặc bất kỳ thứ gì có thể đơn giản hóa điều này. Hoặc một dự án hiện có có những gì tôi cần hoặc có thể dẫn tôi đi đúng hướng.
Cảm ơn.
+1 Tuyệt vời! Đã không nhìn thấy thử nghiệm phạm vi được xây dựng vào API QuerySet của Django. –
Cảm ơn bạn về mẹo tuyệt vời. Điều này đã thiếu các sự kiện bắt đầu trước và kết thúc sau cuộc hẹn mới. Ví dụ: Nếu khách hàng có cuộc hẹn từ 1 đến 5, điều này sẽ không ngăn ai đó đặt chỗ từ 2 đến 3. Tôi đã thêm những điều sau đây để bao gồm các tình huống như vậy: in_conflict = Appointment.objects.filter (start_date__lte = appoint.start_time, end_date__gte = cuộc hẹn.end_time) nếu (start_conflict hoặc end_conflict hoặc trong_conflict): – mhost
Tuyệt vời. Tôi rất vui vì điều này rất hữu ích. Tôi sẽ thêm trường hợp của bạn để câu trả lời hoàn chỉnh hơn. –