如何查询Djang

2024-04-29 14:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

晚安,我有个问题不知道怎么解决。我的应用程序中有三个模型:

class Hecho(models.Model):
    codigo = models.CharField(max_length=1)
    hecho = models.CharField(max_length=100)

class Beneficiario(models.Model):
    tipoDocumento = models.CharField(max_length=150)
    numeroDocumento = models.IntegerField()
    nombre = models.CharField(max_length=150)

class HechoBeneficiario(models.Model):
    beneficiario = models.ForeignKey(Beneficiario)
    hecho = models.ForeignKey(HechoVictimizante) 

正如你所看到的,HechoBeneficiario模型将其他两个模型联系起来。 我的问题是像使用受益人模型我可以得到模型赫乔和画在一个模板这?你知道吗


Tags: 模型应用程序modelmodelslengthmaxclasscodigo
1条回答
网友
1楼 · 发布于 2024-04-29 14:06:16

在您的情况下,最好使用many to many字段。您的模型将如下所示:

class Beneficiario(models.Model):
        tipoDocumento = models.CharField(max_length=150)
        numeroDocumento = models.IntegerField()
        nombre = models.CharField(max_length=150)

class Hecho(models.Model):
    codigo = models.CharField(max_length=1)
    hecho = models.CharField(max_length=100)
    beneficiarios = models.ManyToManyField(Beneficiario, related_name='hechos')

您可以使用以下代码获取受益人的所有hechos:

hechos = beneficiario_object.hechos.all()

然后用这个代码得到所有的受益人:

beneficiarios = hecho_object.beneficiarios.all()

但您应该知道,每次尝试访问多对多字段时,django都会命中数据库。为了防止这种情况,您可以在检索所有受益人模型时使用prefetch_related,如下所示:

beneficiarios = Beneficiario.objects.prefetch_related('hechos')
for beneficiario in beneficiarios:
    print(beneficiario.hechos.all())

它只会命中数据库2次。你知道吗

相关问题 更多 >