CustomUserModel не имеет пользовательских_докторов
У меня есть подробная страница клинической операции. И я хочу сделать ее доступной только для персонала и врачей, связанных с этой операцией с помощью ManyToManyField
За то, что я сделал это
class OperationPanelView(LoginRequiredMixin,View):
login_url = reverse_lazy("doctor:login")
def get(self,request,id):
operation = OperationModel.objects.get(id=id)
if request.user.user_doctors not in operation.doctor.all():
if DoctorModel.objects.filter(user = request.user).exists():
return redirect("doctor:panel",request.user.id)
elif request.user.is_staff == True:
return redirect("disease:panel",operation.id)
context = {
"operation":operation,
}
return render(request,"operation_detail.html",context)
это сработало, если request.user.user_doctors не связан с врачами этой операции, то он перенаправляет пользователя на его собственную панель. А также если request.user.user_doctors связан с врачами операции, то страница будет открыта.
Но не работает, если пользователь является сотрудником, и выдает такую ошибку:
RelatedObjectDoesNotExist at /disease/panel/1
CustomUserModel has no user_doctors.
in line 35: if request.user.user_doctors not in operation.doctor.all():
Затем я добавляю следующее условие:
if request.user.user_doctors:
но это тоже дало ту же ошибку
DoctorModel:
class DoctorModel(models.Model):
BLOOD_TYPE_CHOICES = [
("A+","A+"),
("A-","A-"),
("B+","B+"),
("B-","B-"),
("O+","O+"),
("O-","O-"),
("AB+","AB+"),
("AB-","AB-"),
]
GENDER_CHOICES = [
("Male","Male"),
("Female","Female"),
]
user = models.OneToOneField("account.CustomUserModel",on_delete=models.CASCADE,null=False,blank=False,related_name="user_doctors")
first_name = models.CharField(verbose_name="Ad:",max_length=40,null=False,blank=False)
last_name = models.CharField(verbose_name="Soyad:",max_length=60,null=False,blank=False)
gender = models.CharField(choices=GENDER_CHOICES,max_length=6)
working_field = models.ForeignKey(DoctorField,on_delete=models.SET_NULL,null=True,blank=False,related_name="field_doctors")
phonenumber = PhoneNumberField(null=False,blank=True)
about = models.TextField(verbose_name="Haqqinda:",null=True,blank=True)
is_active = models.BooleanField(default=True)
blood_type=models.CharField(choices=BLOOD_TYPE_CHOICES,max_length=10, null=True,blank=False)
born_date = models.DateField(null=True,blank=False)
OperationModel:
class OperationModel(models.Model):
name = models.CharField(null=True,blank=True,max_length=45)
description = models.TextField(null=True,blank=True)
disease = models.ManyToManyField(DiseaseModel,related_name="disease_operations")
doctor = models.ManyToManyField("doctors.DoctorModel",blank=False,related_name="doctor_operations")
starting_date = models.DateTimeField(auto_now_add=True)
finished_date = models.DateTimeField(auto_now=True)
patient = models.ForeignKey("patients.PatientModel",on_delete=models.DO_NOTHING,related_name="patient_operations")
is_active = models.BooleanField(default=True)