2017-03-14 1 views
0

Gute Nacht, ich habe ein Problem, dass ich nicht weiß, wie man es löst. Ich habe drei Modelle in meiner Anwendung:Abfrage Django

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) 

Wie Sie das Modell HechoBeneficiario bezieht sich die beiden anderen Modelle zu sehen. Mein Problem ist wie mit dem Beneficiario Modell kann ich das Modell Hecho bekommen und dieses in einer Vorlage malen?

+0

Was haben Sie bisher versucht? Welche Frage versuchen Sie überhaupt zu stellen? Haben Sie die Dokumentation zum Thema "Abfragen" gelesen? – Soviut

+0

Was möchten Sie tun? Beliebige Ausgabe? Bitte bearbeiten Sie Ihre Frage und fragen Sie sie richtig –

+0

Erstes Google-Ergebnis für 'Wie django abfragen': https://docs.djangoproject.com/de/1.10/topics/db/queries/ – ChidG

Antwort

0

In Ihrer Situation besser zu many to many Feld zu verwenden. Ihre Modelle werden wie folgt aussehen:

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') 

Und Sie können alle hechos für beneficiario mit diesem Code erhalten:

hechos = beneficiario_object.hechos.all() 

und erhalten Sie alle beneficiario für hecho mit diesem Code:

beneficiarios = hecho_object.beneficiarios.all() 

Aber Sie sollten wissen, dass Django jedes Mal die Datenbank trifft, wenn Sie versuchen, auf viele zu viele Felder zuzugreifen. Für diese verhindern können Sie prefetch_related verwenden, wenn Sie alle Ihre beneficiario Modelle abrufen, wie folgt aus:

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

Es wird Hit-Datenbank nur 2 mal.