簡體   English   中英

Django Rest Framework,顯示用外鍵引用的表中的數據

[英]Django Rest Framework, display data from a table referenced with a foreign key

我在做學校項目時遇到了一個小問題,問題是我有一個帶DRF的api,想顯示我的患者數據“主表”顯示它們沒有問題,但是當我想顯示其他患者數據時另一個表(該表是該表的參考,並帶有指向Patient的外鍵),我沒有設法從另一個表中獲取病人數據。

我無法使我的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)

serializers.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)

如果需要顯示所有Antecedentes涉及到具體的Paciente可以使用反向查找paciente.antecedentes_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數據中的所有antecedentes paciente 嵌套序列化的詳細信息可以在這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM