Как создать связь между моделью пользователя и другой моделью в 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" не является действительным пользователем.

Вернуться на верх