質問
私は左のビットが問題に参加してい..私は次のモデルを持っている。
class CommandInfo(models.Model):
server = models.ForeignKey(Server)
count = models.IntegerField(default=1)
ts = models.DateTimeField(auto_now=True)
class Server(models.Model):
name = models.CharField(max_length=100)
group = models.ForeignKey(ApplicationGroup, blank=True, default=0)
host = models.CharField(max_length=100)
ip = models.IPAddressField(db_index=True)
about = models.TextField()
firstTS = models.DateTimeField(auto_now_add=True)
lastTS = models.DateTimeField(auto_now=True)
processed = models.SmallIntegerField(max_length=1, default=0)
def __unicode__(self):
return self.host
私は、すべてのサーバーインスタンスを取得する必要があり、1つが存在する場合、それにするCommandInfoに参加残しました。
今、私は生のSQLでそれをやっている。
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT host,ts,count as host FROM servers_server LEFT JOIN cmds_commandinfo ON server_id=servers_server.id")
servers = cursor.fetchall()
解決
あなたは、次のようなコードを使用することができます:
s = Server.objects.get(id=1)
cmdinfo = s.commandinfo_set.all()
外部キーとして設定されているすべてのs
するCommandInfoオブジェクトのリストを返すことになる。
あなたはDjangoのドキュメントで詳細情報を取得することができ、 "<のhref =" http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward "のrel =" nofollowをnoreferrer ">次の関係は、下位を"。
他のヒント
時々、DjangoのORMは、左を必要とする)select_relatedで明示的に(名前であるフィールド名に参加しています。
あなたはおそらくそれを微調整するが、のような何かをしようとする必要がありますので、これはちょうど私の頭の上からです。
s = Server.objects.select_related('commandinfo_set')
commands_by_server_id = defaultdict(list)
for c in CommandInfo.objects.select_related('server'):
commands_by_server_id[c.server.id].append(c)
servers = Server.objects.all()
for s in servers:
s.commands = commands_by_server_id.get(s.id, [])
あなたがするCommandInfoせずにすることができますサーバによるサーバのリストを取得する必要がありますのでご注意ください。
所属していません StackOverflow