2009-06-30 10 views
0

Ich habe den folgenden Code in einer Ansicht, um einige der Informationen auf dem Konto angezeigt zu bekommen. Ich habe stundenlang versucht, das via ORM zum Laufen zu bringen, konnte es aber nicht funktionieren lassen. Am Ende habe ich es in roher SQL gemacht, aber was ich will, ist nicht sehr komplex. Ich bin sicher, dass es mit ORM möglich ist.Django ORM entspricht

Am Ende möchte ich nur das Wörterbuch accountDetails von ein paar Tabellen auffüllen.

cursor.execute("SELECT a.hostname, a.distro, b.location FROM xenpanel_subscription a, xenpanel_hardwarenode b WHERE a.node_id = b.id AND customer_id = %s", [request.user.id]) 
accountDetails = { 
    'username': request.user.username, 
    'hostname': [], 
    'distro': [], 
    'location': [], 
} 

for row in cursor.fetchall(): 
    accountDetails['hostname'].append(row[0]) 
    accountDetails['distro'].append(row[1]) 
    accountDetails['location'].append(row[2]) 

return render_to_response('account.html', accountDetails, context_instance=RequestContext(request)) 
+0

Post-Modelle, so haben wir nicht – zinovii

+0

erraten, nicht mit danken Sie getrennte Antwort, hehe. Akzeptiere einfach seine Antwort als die richtige. – drozzy

Antwort

2

Es wäre einfacher, wenn Sie Modelle buchen. Aber von SQL Ich gehe davon aus, die Modelle sind wie folgt aus:

class XenPanelSubscription(models.Model): 
    hostname = models.CharField() 
    distro = models.CharField() 
    node = models.ForeignKey(XenPanelHardwareNode) 
    customer_id = models.IntegerField() 

    class Meta: 
     db_table = u'xenpanel_subscription' 

class XenPanelHardwareNode(models.Model): 
    location = models.CharField() 

    class Meta: 
     db_table = u'xenpanel_hardwarenode' 

Auf der Basis dieser Modelle:

accountDetails = XenPanelSubscription.objects.filter(customer_id = request.user.id) 
for accountDetail in accountDetails: 
    print accountDetail.hostname, accountDetail.distro, accountDetail.node.location