Python 如何查询Django

Python 如何查询Django,python,django,django-models,Python,Django,Django Models,你好,我有一个问题,我不知道如何解决它。我的应用程序中有三种型号: 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) numeroDo

你好,我有一个问题,我不知道如何解决它。我的应用程序中有三种型号:

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模型与其他两个模型相关联。
我的问题是使用受益人模型,我可以得到模型Hecho并在模板中绘制它吗?

在您的情况下更好地使用字段。您的模型将如下所示:

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')
beneficiarios = Beneficiario.objects.prefetch_related('hechos')
for beneficiario in beneficiarios:
    print(beneficiario.hechos.all())
您可以使用以下代码获取受益人的所有hechos:

hechos = beneficiario_object.hechos.all()
beneficiarios = hecho_object.beneficiarios.all()
并使用以下代码获取hecho的所有受益人:

hechos = beneficiario_object.hechos.all()
beneficiarios = hecho_object.beneficiarios.all()
但您应该知道,每次尝试访问多对多字段时,django都会访问数据库。为了防止出现这种情况,您可以在检索所有受益人模型时使用,如下所示:

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')
beneficiarios = Beneficiario.objects.prefetch_related('hechos')
for beneficiario in beneficiarios:
    print(beneficiario.hechos.all())

它只会命中数据库2次。

到目前为止,您尝试过什么?你到底想问什么?你读过关于“进行查询”的文档了吗?你想做什么?有需要的输出吗?请编辑您的问题并正确提问“如何查询django”的第一个谷歌结果: