Сделать шаг во времени по 30 мин
Как можно сделать так, чтобы время для приёма генерировалось от того времени, когда работает доктор
У меня есть модели для докторов и их графика работы doctor.models `
class DoctorUser(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, primary_key=True)
class Meta:
verbose_name = 'Доктор'
verbose_name_plural = 'Доктора'
def __str__(self):
"""Returns the doctor's full name."""
return f'{self.user}'
class DoctorProfile(models.Model):
user = models.OneToOneField(DoctorUser, on_delete=models.CASCADE, primary_key=True)
department = models.ForeignKey(Department, on_delete=models.PROTECT, null=True)
experience = models.PositiveIntegerField(default=2)
class Meta:
verbose_name = 'Профиль доктора'
verbose_name_plural = 'Профили докторов'
def __str__(self):
"""Returns the doctor's full name."""
return f"{self.user}"
WEEKDAYS = (
('Пн', 'Понедельник'),
('Вт', 'Вторник'),
('Ср', 'Среда'),
('Чт', 'Четверг'),
('Пт', 'Пятница'),
('Сб', 'Суббота'),
('Вс', 'Воскресенье'),
)
class Schedule(models.Model):
doctor = models.OneToOneField(DoctorProfile, on_delete=models.CASCADE)
weekday = MultiSelectField(max_length=20, choices=WEEKDAYS)
start_time = models.TimeField()
end_time = models.TimeField()
class Meta:
verbose_name = 'График работы доктора'
verbose_name_plural = 'Графики работы докторов'
def __str__(self):
days = ' '.join(self.weekday)
return f"График доктора - {self.doctor} {days}"
**patient.models**
from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from phonenumber_field.modelfields import PhoneNumberField
from doctor.models import DoctorProfile, Department, Schedule
import phonenumbers
class CustomUser(AbstractUser):
is_patient = models.BooleanField(default=True)
phone_number = PhoneNumberField(null=True, unique=True, region='KG')
def __str__(self):
return f'{self.first_name} {self.last_name}'
GENDER = (
('Male', "Мужчина"),
('Female', 'Женщина')
)
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile',
primary_key=True)
gender = models.CharField(max_length=30, choices=GENDER)
phone_number = PhoneNumberField(null=True, unique=True, region='KG')
def __str__(self):
"""Returns the patient's full name."""
return f"{self.user}'s profile"
class Appointment(models.Model):
patient = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=False)
referred_department = models.ForeignKey(Department, on_delete=models.CASCADE, null=False)
referred_doctor = models.ForeignKey(DoctorProfile, on_delete=models.CASCADE, null=False)
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, null=False)
appointment_date = models.DateField(null=False)
appointment_time = models.TimeField(null=False)
confirm_appointment = models.BooleanField(default=False, null=False)
def __str__(self):
return f"Приём у {self.patient}"
`