Как создать связь между моделью пользователя и другой моделью в django, если в другой модели есть два поля, чтобы сделать связь
Я работаю над приложением, в котором у меня есть два типа пользователей - пациенты и врачи, где пациенты могут записываться на прием к врачам. Я использую встроенную в Django модель User для регистрации пользователей. У меня есть модель записи на прием, но я не могу установить связь между моделью записи на прием и моделью пользователя, так как я хочу ссылаться на пациента и врача в модели записи на прием.
когда я попытался использовать Foreign Key
Модель назначения
class Appointment(models.Model):
patient = models.ForeignKey(UsersInfo,on_delete=models.CASCADE,default="None")
doctor = models.ForeignKey(DoctorInfo,on_delete=models.CASCADE,default="None")
doctor = models.CharField(max_length=20,blank=False)
patient = models.CharField(max_length=20,blank=False)
date = models.DateField(blank=False)
time = models.TimeField(blank=False)
status = models.CharField(default="pending",blank=True, max_length=20)
во время миграции
python manage.py migrate
Ошибка
путем замены внешнего ключа на ManyToManyField
class Appointment(models.Model):
patient = models.ManyToManyField(User, related_name="patient_user")
doctor = models.ManyToManyField(User,related_name="doctor_user")
date = models.DateField(blank=False)
time = models.TimeField(blank=False)
status = models.CharField(default="pending",blank=True, max_length=20)
миграция прошла успешно и я зарегистрировал несколько пользователей и добавил записи на прием к врачу но вот проблема, когда я создаю запись на прием, поскольку в ней patient_user и doctor_user являются итерациями, а не просто одиночными объектами
# user is the current user/patient who is making appointment
patient_user = User.objects.filter(id=request.user.id)
doctor_user = User.objects.filter(id=doctor_id)
# book the appointment
new_appointment = Appointment.objects.create(date=date, time=time, status = "pending")
new_appointment.patient.set(patient_user)
new_appointment.doctor.set(doctor_user)
Как мне наладить отношения с пациентом и врачом на приеме у Пользователя?
Измените эти строки
patient = models.ForeignKey(UsersInfo,on_delete=models.CASCADE,default="None")
doctor = models.ForeignKey(DoctorInfo,on_delete=models.CASCADE,default="None")
to
patient = models.ForeignKey(UsersInfo,on_delete=models.CASCADE,null=True, blank=True)
doctor = models.ForeignKey(DoctorInfo,on_delete=models.CASCADE,null=True, blank=True)
затем очистите ваш последний файл миграции и сделайте миграции снова
Вы получаете эту ошибку, потому что UsersInfo или DoctorsInfo может иметь только действительные данные в качестве значения по умолчанию, "None" не является действительным пользователем.