2016-05-08 11 views
-1

Ich muss mit der ID des Kindes Großeltern Objekt öffnen mit folgendem Modell:Wahl Großeltern Tabelle db mit Django

class Grandparent(models.Model): 
    grandparent_name = CharField(max_length=20) 

class Parent(models.Model): 
    grandparent = ForeignKey(Grandparent) 
    parent_name = CharField(max_length=20) 

class Child(models.Model): 
    parent = ForeignKey(Parent) 
    child_name = CharField(max_length=20) 

auf Kinder Liste Seite Staying ich direkt zu ihm ist Großvater gehen wollen.

hatte ich eine Idee SQL Anfrage meiner Meinung nach etwas zu verwenden:

def grandparent_detail(request, child_id): 
    context = {'grandparent_id':grandparent_id} 
     grand= Grandparent.objects.raw(SELECT grandparent_id 
     FROM myapp_Grandparent WHERE 
     GRandparent.grandparent_id = Parent.parent_id 
     AND Parent.parent_id = Child.child_id) 
    return render(request, 'myapp/grandparent_detail.html', {'grandparent_id':grandparent_id}) 

Aber es funktioniert nicht.

Können Sie mir einen Rat geben, wenn es in Django ein Instrument gibt, um solche strukturellen Anforderungen zu stellen? Vielen Dank.

Mein Endziel ist Großeltern/Eltern/Kind aus Kinderlistenseite mit einem solchen URL-Mustern der Lage sein, zu verknüpfen:

urlpatterns = [ 
url(r'^$', views.childrenlist, name = 'childrenlist'), 
url(r'^grandparents/<grandparent_id>[0-9]+/$', 
    views.grandparent, name = 'grandparent'), 
url(r'^grandparents/<grandparent_id>[0-9]+/parents/ 
    <parent_id>[0-9]+/$', views.parent, name = 'parent'), 
url(r'^grandparents/<grandparent_id>[0-9]+/parents/ 
    <parent_id>[0-9]+/children/<child_id>[0-9]+/$', 
    views.parent, name = child'), 

Können Sie bitte Beispiel für richtigen Tag zeigen, wenn ich weiß, nur die Child_id ?

Antwort

0

So Endlösung ich für meinen Fall gefunden wird in Vorlage folgenden Link:

<a href="/myapp/grandparents/{{ child.parent.grandparent_id }}/parents/{{ child.parent_id }}/children/{{ child_id }}/">link</a> 
0

Versuchen Sie folgendes:

Parent.objects.filter(
    grandparent=grandparent_id, 
    child__parent_id=parent_id 
    ).select_related('grandparent') 

Vorlage:

{{ parent.grandparent.grandparent_name }} 
0

Wenn Sie bis eine ForeignKey in django Sie den Fremdkörper mit seiner Eigenschaft zugreifen kann, so dass diese Ansicht:

def grandparent_detail(request, child_id): 
    grandparent = Child.objects.get(id=child_id).parent.grandparent 
    return render(request, 'myapp/grandparent_detail.html', {'grandparent':grandparent}) 

Ermöglicht Ihnen den Zugriff auf das Großelternobjekt in der Vorlage. Kein SQL benötigt.

Als Referenz können Sie die Parent Objekte eines Großeltern Zugriff entweder im Code oder in Vorlagen wie folgt:

grandparent.parent_set.all() # A queryset of related parents