Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何限制在Django中代表其他用户插入数据?_Python 3.x_Django_Django Models_Django Rest Framework_Django Views - Fatal编程技术网

Python 3.x 如何限制在Django中代表其他用户插入数据?

Python 3.x 如何限制在Django中代表其他用户插入数据?,python-3.x,django,django-models,django-rest-framework,django-views,Python 3.x,Django,Django Models,Django Rest Framework,Django Views,我的django项目中有以下代码 models.py serializers.py views.py 然后,这些视图分别与端点医生/和患者/连接起来。我遇到的问题是限制所有者(在本例中是医院、耶鲁大学或米德尔塞克斯大学)不能代表其他医生插入患者。以下屏幕截图显示我以“米德尔塞克斯”身份登录,但可以选择代表Bob博士或Alice博士插入患者,他们与耶鲁医院(所有者)而不是米德尔塞克斯医院有关联。我如何解决这个问题?如果我以“米德尔塞克斯”身份登录,我将只看到弗雷德医生,作为将医院中选定的医生与新患

我的django项目中有以下代码

models.py
serializers.py
views.py
然后,这些视图分别与端点
医生/
患者/
连接起来。我遇到的问题是限制所有者(在本例中是医院、耶鲁大学或米德尔塞克斯大学)不能代表其他医生插入患者。以下屏幕截图显示我以“米德尔塞克斯”身份登录,但可以选择代表Bob博士或Alice博士插入患者,他们与耶鲁医院(所有者)而不是米德尔塞克斯医院有关联。我如何解决这个问题?如果我以“米德尔塞克斯”身份登录,我将只看到弗雷德医生,作为将医院中选定的医生与新患者关联的选项?请参阅下图,以更好地了解我想要了解的内容

请查看DRF文档中的。请尝试更新您的
serializers.py
,以便根据当前登录的用户筛选医生:

从rest\u框架导入序列化程序
从。模型导入医生、患者
类DoctorSerializer(serializers.ModelSerializer):
类元:
模特=医生
字段=[
“姓名”,
“教育”
]
类FilterEdctor(序列化程序.SlugRelatedField):
def get_queryset(自我):
queryset=Doctor.objects.all()
request=self.context.get('request',None)
如果请求为无:
返回查询集
如果不是request.user.is_superuser:
queryset=queryset.filter(hospital=request.user)
返回查询集
类PatientSerializer(serializers.ModelSerializer):
医生=过滤器安装工(
slug_field=“name”,
多=假,
allow_null=False
)
类元:
模型=患者
字段=['name','doctor']
请查看DRF文档中的。请尝试更新您的
serializers.py
,以便根据当前登录的用户筛选医生:

从rest\u框架导入序列化程序
从。模型导入医生、患者
类DoctorSerializer(serializers.ModelSerializer):
类元:
模特=医生
字段=[
“姓名”,
“教育”
]
类FilterEdctor(序列化程序.SlugRelatedField):
def get_queryset(自我):
queryset=Doctor.objects.all()
request=self.context.get('request',None)
如果请求为无:
返回查询集
如果不是request.user.is_superuser:
queryset=queryset.filter(hospital=request.user)
返回查询集
类PatientSerializer(serializers.ModelSerializer):
医生=过滤器安装工(
slug_field=“name”,
多=假,
allow_null=False
)
类元:
模型=患者
字段=['name','doctor']

Review@matthewhagarty您能在这方面提供更多支持吗?ThanksReview@MatthewHegarty您能在这方面提供更多支持吗?谢谢。正是我想要的。非常感谢你@这真是太棒了。正是我想要的。非常感谢你@普隆斯基
from django.db import models

class Doctor(models.Model):
    hospital = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    name = models.CharField(primary_key=True, max_length=256, unique=True)
    education = models.CharField(max_length=256)

class Patient(models.Model):
    doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
    name = models.CharField(max_length=256)
    age = models.CharField(max_length=200)
    height = models.CharField(max_length=6)
    sex = models.CharField(max_length=12)
from rest_framework import serializers
from .models import Doctor, Patient

class DoctorSerializer(serializers.ModelSerializer):

    class Meta:

        model = Doctor

        fields = [
            'name',
            'education'
        ]

class PatientSerializer(serializers.ModelSerializer):

    class Meta:

        model = Patient

        fields = '__all__'
from rest_framework import status, permissions
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Doctor, Patient
from .serializers import DoctorSerializer, PatientSerializer

class DoctorList(APIView):

    permission_classes = [permissions.IsAuthenticated]
    serializer_class = DoctorSerializer

    def get(self, request):
        doctors = Doctor.objects.filter(hospital=request.user)
        serializer = DoctorSerializer(doctors, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        serializer = DoctorSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(hospital=request.user)
            return Response({"message": "Doctor inserted!"}, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class PatientList(APIView):

    permission_classes = [permissions.IsAuthenticated]
    serializer_class = PatientSerializer

    def get(self, request):
        patients = Patient.objects.filter(doctor__hospital=request.user)
        serializer = PatientSerializer(patients, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        serializer = PatientSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({"message": "Patient inserted!"}, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)