Django ORM equivalente
Domanda
Ho il seguente codice in una vista per ottenere alcune delle informazioni sul conto per visualizzare. Ho cercato per ore per arrivare a questo lavoro tramite ORM, ma non sono riuscito a farlo funzionare. Ho finito per fare in SQL prime, ma quello che voglio non è molto complesso. Sono certo che è possibile fare con ORM.
Alla fine, voglio solo per popolare i accountDetails del dizionario da un paio di tavoli.
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))
Soluzione
Sarebbe più facile se pubblichi modelli. Ma da SQL Sto assumendo i modelli sono come questo:
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'
Sulla base di questi modelli:
accountDetails = XenPanelSubscription.objects.filter(customer_id = request.user.id)
for accountDetail in accountDetails:
print accountDetail.hostname, accountDetail.distro, accountDetail.node.location
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow