Django - 如何达到关系领域

Django - How to reach relational field

我有 Patient 模型,它与 ICF 模型有多对多的关系。 ICF 模型具有多对一字段到 Unite 模型。在 Unite 模型中,我有 Unite 名称。我想获得分配给具有关系的 Patient 的 Unite 名称。我尝试为每个 Patient 找到 Unite 的名字。如果不止一个,我无法为那个人列出它们。这是我的代码。

这是我的病人模型。

class Patient (models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    lastname = models.CharField(max_length=255, default="doe")
    data = models.JSONField()
    Intensivecare_form = models.ManyToManyField(Intensivecare_Form)
    isDeleted = models.BooleanField(default=False)

这是我的 ICF 模型。

class Intensivecare_Form (models.Model):
    id = models.AutoField(primary_key=True)
    hospitals_id = models.ForeignKey(Hospital, on_delete=models.CASCADE)
    formname = models.CharField(max_length=128)
    data = models.JSONField()
    unites_id = models.ForeignKey(Unite, on_delete=models.CASCADE)

最后,这是我的 Unite 模型

class Unite (models.Model):
    id = models.AutoField(primary_key=True)
    unitename = models.CharField(max_length=128)

在我的 views.py 文件中我有一个函数如下

def listPatients(request):
    Patients = Patient.objects.all()
    output = []
    for patient in Patients:
        unitename = []
        icfinfo = serializers.serialize('json', patient.Intensivecare_form.all())
        jsonicfinfo = json.loads(icfinfo)
        unitename.append(jsonicfinfo)
        output.append({'id': patient.id,
                       'fname': patient.name,
                       'lname': patient.lastname,
                       'data': patient.data,
                       'unitename': unitename,
                       })
    return JsonResponse(output, safe=False)

这是输出的样子。我需要在 unitename

中访问 formname

0-> id, fname..., unitename-> 0 -> fields -> unitename

您的 ICForm 似乎只指向一个 Unite 对象。

也许试试这个来获取查询中的所有 ICForm。

而不是

unitename = []
icfinfo = serializers.serialize('json', patient.Intensivecare_form.all())
jsonicfinfo = json.loads(icfinfo)
unitename.append(jsonicfinfo)

尝试重命名 Intensivecare_form 模型重命名 unites_id 以统一——django 知道自动在 id 上 link 并调用它 unites_id 可能会导致命名冲突

Intensivecare_Form(models.Model):
    unites = models.ForeignKey(Unites, on_delete=models.CASCADE)

要获取所有联合名称,只需在一次查询中获取即可

   unite_names = list(patient.Intensivecare_form.all().values_list('unites__unitename', flat=True))

这应该适合你!祝你好运!