2009-06-30 205 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