CustomUserModel 没有 user_doctors

发布于 2025-01-13 14:54:29 字数 3401 浏览 1 评论 0原文

我有临床操作的详细页面。我想让它仅可供与此操作相关的工作人员和医生使用 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)

CustomUserModel:

class CustomUserModel(AbstractUser):
    username = None
    is_accepted = models.BooleanField(default=False)
    email = models.EmailField(_("email address"),unique=True)
    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []
    objects = CustomUserManager()

    class Meta:
        db_table = "user"

I have a detail page of clinical operation. And i want to make it accessible for only staff's and doctor's related with this operation with ManyToManyField

For do this i did

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)

this has worked for if request.user.user_doctors is not related with this operation's doctors then it will redirects the user to their own panel.
And also has worked for if request.user.user_doctors is related with operation's doctors then page will open.

But didn't worked for if user is staff and gave this error:

RelatedObjectDoesNotExist at /disease/panel/1
CustomUserModel has no user_doctors.
in line 35: if request.user.user_doctors not in operation.doctor.all(): 

Then i add this condition:

        if request.user.user_doctors:

but this gave the same error too

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)

CustomUserModel:

class CustomUserModel(AbstractUser):
    username = None
    is_accepted = models.BooleanField(default=False)
    email = models.EmailField(_("email address"),unique=True)
    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []
    objects = CustomUserManager()

    class Meta:
        db_table = "user"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文