28

model.py

class Tdzien(models.Model):
  dziens = models.SmallIntegerField(primary_key=True, db_column='DZIENS')
  dzienrok = models.SmallIntegerField(unique=True, db_column='ROK')


class Tnogahist(models.Model):
  id_noga = models.ForeignKey(Tenerg, primary_key=True, db_column='ID_ENERG')
  dziens = models.SmallIntegerField(db_column='DZIENS')

私が欲しいのは、dzienrok=1234 の id_noga を取得することです。私はdziensがそうあるべきであることを知っています

dziens = models.ForeignKey(Tdzien)

しかし、そうではなく、それを変更することはできません。通常、私は次のようなものを使用します

Tnogahist.objects.filter(dziens__dzienrok=1234)

しかし、外部キーなしでそれらのテーブルを結合してフィルタリングする方法がわかりません。

4

4 に答える 4

23

私の知る限り、外部キーのない結合はありませんが、次の 2 つのクエリを使用できます。

Tnogahist.objects.filter(dziens__in=Tdzien.objects.filter(dzienrok=1234))

于 2013-10-25T12:57:24.543 に答える
19

生の SQL クエリを実行することで、2 つのテーブルを結合することができます。しかし、この場合はかなり厄介なので、models.py を書き直すことをお勧めします。

ここでこれを行う方法を確認できます

次のようになります。

from django.db import connection

def my_custom_sql(self):
    cursor = connection.cursor()    
    cursor.execute("select id_noga
                    from myapp_Tnogahist a
                    inner join myapp_Tdzien b on a.dziens=b.dziens
                    where b.dzienrok = 1234")
    row = cursor.fetchone()
    return row
于 2013-10-25T13:50:42.103 に答える