2009-06-30 59 views
0

我在視圖中獲得以下代碼以獲取要顯示的帳戶的一些信息。我試了好幾個小時纔得到這個通過ORM工作,但無法使其工作。我結束了在原始SQL中執行它,但我想要的不是很複雜。我確信可以使用ORM。Django ORM等效

最後,我只是想從幾個表中填充字典accountDetails。

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

安置自己的車型,所以我們不必去猜測 – zinovii 2009-06-30 19:02:19

回答

2

如果發佈模型會更容易。但是,從SQL我假設的模型是這樣的:

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' 

基於這些模型:

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