程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了django rest 中的外键和序列化程序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决django rest 中的外键和序列化程序?

开发过程中遇到django rest 中的外键和序列化程序的问题如何解决?下面主要结合日常开发的经验,给出你关于django rest 中的外键和序列化程序的解决方法建议,希望对你解决django rest 中的外键和序列化程序有所启发或帮助;
class PatIEnt(models.Model):
    user = models.OnetoOneFIEld(User,related_name='patIEnt',on_delete=models.CASCADE)
    ID_type = models.CharFIEld(max_length=300)
    ID_number = models.CharFIEld(max_length=300)
    creation_date = models.DateFIEld(default=datetiR_98_11845@e.date.today)


class AllergIE(models.Model):
    name = models.CharFIEld(max_length=300,default="X")


class PatIEntAllergIEs(models.Model):
    patIEnt = models.ForeignKey(PatIEnt,related_name="patIEnt_allergIEs",on_delete=models.CASCADE)
    allergIE = models.ForeignKey(AllergIE,on_delete=models.CASCADE,null=TruE)
    professional_contract = models.ForeignKey(ProfessionalContract,null=True,on_delete=models.CASCADE)

是否可以使用包含所有过敏症列表的属性(包括这些模型的姓名和 ID)来检索患者的反对意见?

解决方法

您将 PatientAllergies 作为一个链, 所以

patientAllergies = PatientAllergies.objects.get(patient.id_number='0000')
patientAllergies.allergie #you get the single allergie model connect with it,take care it is a ForeignKey so it is singolar and not many
patientAlleriges.patient.user #will give you access to all the data of the user
,

您可以像这样使用 prefetch_relatedPrefetch 实现此目的:

Patient.objects.prefetch_related(
    Prefetch('patient_allergies__allergie',to_attr='allergies')
)

EDIT:刚刚了解到 to_attr 不适用于多级预取。我能想到的另一种方法是使用 Patient 的模型属性返回其相关的过敏症,如下所示:

class Patient(models.Model):
    @property
    def allergies(self):
        return Allergie.objects.filter(patientallergies_set__patient=self)

然后在您的序列化程序中,allergies 字段可以使用 Allergies 序列化程序

大佬总结

以上是大佬教程为你收集整理的django rest 中的外键和序列化程序全部内容,希望文章能够帮你解决django rest 中的外键和序列化程序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。