2016-12-14 8 views
0

次の3つのモデルがあるとします。次のSQL文と同じ効果をアーカイブするDjangoモデルのクエリを作成します。Djangoモデルの内部結合ORMの問題

SQL文

select B.value, C.special 
from B inner join C 
where B.version = C.version and B.order = C.order; 

私は、次の3つのモデルだ:私はProcessStepモデルに対して同じ(バージョン、オーダー)タプルマッチングを持つすべての承認を見つけたい

class Process(models.Model): 
    name = models.CharField(max_length=30) 
    description = models.CharField(max_length=150) 

class ProcessStep(models.Model): 
    process = models.ForeignKey(Process) 
    name = models.CharField(max_length=30) 
    ... 
    order = models.SmallIntegerField(default=1) 
    version = models.SmallIntegerField(null=True) 

class Approve(models.Model): 
    process = models.ForeignKey(Process) 
    content = models.CharField(max_length=300) 
    ... 
    version = models.SmallIntegerField(null=True) 
    order = models.SmallIntegerField(default=0) 

を。

+0

どのように相互に関連し、これらの2つのモデルがありますか? – AKS

+0

2つのモデルは同じフィールド(バージョン、順序)を持っていました。同じ(バージョン、順序)の組み合わせを持つ** Approve **のレコードを除外します。 – shady

+0

私が言っていることは、両方とも同じ「プロセス」に関係しているかどうかです。 – AKS

答えて

0

これは何か?

Approve.objects.filter(process__processstep_set__order=<value>) 
+0

私はこれが私のために働くとは思わない〜 – shady

0

今私は、次のコードを参照してください、生のSQLを使用することにより溶液で出てくることができます。

from django.db import connection 
cursor = connection.cursor() 
cursor.execute(" 
SELECT A.id, B.id 
from approval_approve as A inner join approval_approvalstep as B 
where A.process_id = B.process.id 
    and A.order = B.order 
    and A.version = B.version;") 
# do something with the returned data 

君たちは、任意のより良い解決策を持っている場合、私はあなたから聞きたい、ありがとう〜

関連する問題