Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Django Rest框架,显示用外键引用的表中的数据_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架,显示用外键引用的表中的数据

Python Django Rest框架,显示用外键引用的表中的数据,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在做学校项目时遇到了一个小问题,问题是我有一个带DRF的api,希望显示我的患者数据“主表”显示它们没有问题,但当我想在不同的表中显示其他患者数据时(此表是患者外键的参考)我还没有从另一个表中获取患者数据 我无法使我的api从引用到患者的外键向我发送其他患者数据,您能帮助我吗 models.py class Paciente(TimeStampedModel): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=m

我在做学校项目时遇到了一个小问题,问题是我有一个带DRF的api,希望显示我的患者数据“主表”显示它们没有问题,但当我想在不同的表中显示其他患者数据时(此表是患者外键的参考)我还没有从另一个表中获取患者数据

我无法使我的api从引用到患者的外键向我发送其他患者数据,您能帮助我吗

models.py

class Paciente(TimeStampedModel):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    udi = models.UUIDField(default=uuid.uuid4, editable=False)
    first_name = models.CharField('Nombre(s)', max_length=100)
    last_name = models.CharField('Apellidos', max_length=100)
    gender = models.CharField('Sexo', max_length=20, choices=GENDER_CHOICES)
    birth_day = models.DateField('Fecha de nacimiento', blank=True, null=True)
    phone_number = models.CharField('Número de telefono', max_length=13)
    civil_status = models.CharField('Estado civil', max_length=20, choices=CIVIL_STATUS_CHOICES)
    etc.....

class Antecedentes(TimeStampedModel):
    """
    Modelo de motivo y antecedentes de la enfermedad presentada en el momento de
    la consulta
    """
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    paciente = models.ForeignKey(Paciente, on_delete=models.CASCADE, null=True)
    motivo = models.TextField('Motivo de la consulta')
    antecedentes = models.TextField('Antecedentes de la enfermedad actual', blank=True, null=True)
序列化程序.py

class antecedenteSerializer(serializers.ModelSerializer):
    user = serializers.ReadOnlyField(source="user.username")

    class Meta:
        model = Antecedentes
        fields = ('paciente' ,'motivo', 'antecedentes', )
views.py 我试过了,但我不知道这是否正确

from historiaClinica import models as modelsHC
class antecedenteList(APIView):
    """
    Lista todos los antecedentes o crea uno nuevo
    """
    def get_object(self, pk):
        try:
            paciente = get_object_or_404(pk=pk)
            return modelsHC.Antecedentes.objects.get(paciente=paciente)
        except modelsHC.Antecedentes.DoesNotExist:
            raise Http404
    def get(self, request, pk, format=None):
        antecedente = self.get_object(pk)
        serializer = antecedenteSerializer(antecedente)
        return Response(serializer.data)

如果需要显示与特定的
Paciente
相关的所有
先行项,可以使用反向查找
Paciente.antecedents\u set.all()
,因此在视图中可以执行以下操作:

class antecedenteList(APIView):
    """
    Lista todos los antecedentes o crea uno nuevo
    """
    def get_object(self, pk):
        try:
            paciente = get_object_or_404(pk=pk)
            return paciente
        except modelsHC.Antecedentes.DoesNotExist:
            raise Http404
    def get(self, request, pk, format=None):
        paciente = self.get_object(pk)
        antecedentes = paciente.antecedentes_set.all()
        serializer = antecedenteSerializer(antecedentes, many=True)
        return Response(serializer.data)
注意,我使用序列化程序的
many=True
参数同时序列化多个对象


此外,将来可能需要嵌套序列化来显示
paciente
数据中的所有
先行项。可以找到嵌套序列化的详细信息。

如果需要显示与特定
Paciente
相关的所有
先行项,可以使用反向查找
Paciente.antecientes\u set.all()
,因此在视图中可以执行以下操作:

class antecedenteList(APIView):
    """
    Lista todos los antecedentes o crea uno nuevo
    """
    def get_object(self, pk):
        try:
            paciente = get_object_or_404(pk=pk)
            return paciente
        except modelsHC.Antecedentes.DoesNotExist:
            raise Http404
    def get(self, request, pk, format=None):
        paciente = self.get_object(pk)
        antecedentes = paciente.antecedentes_set.all()
        serializer = antecedenteSerializer(antecedentes, many=True)
        return Response(serializer.data)
注意,我使用序列化程序的
many=True
参数同时序列化多个对象


此外,将来可能需要嵌套序列化来显示
paciente
数据中的所有
先行项。您可以找到嵌套序列化的详细信息。

url是否相同或更改?谢谢你的回答@MiguelToledano我认为,如果您使用paciente/{id}/antecedentes:
r'^paciente/(?P[0-9]+)/antecedentes/$”
这样的视图url,它会更加安静,url是相同的还是变化的?谢谢你的回答@MiguelToledano我认为,如果您使用paciente/{id}/antecedentes:
r'^paciente/(?P[0-9]+)/antecedentes/$”这样的视图url,它会更加安静。