[英]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.