2017-09-23 3 views
1

私は以下の3つのモデルを持っています。私は次のSQLクエリから与えられることに期待だとして結果を取得したいDjangoは複数のテーブルを結合します

class Product(models.Model): 
    product_id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=255) 

class MRFDetails(models.Model): 
    mrf_no = models.AutoField(primary_key=True) 
    customer_id = models.ForeignKey(CustomerDetails) 
    product_id = models.ForeignKey(Product) 
    machine_no = models.CharField(max_length=255) 

class MRFStatus(models.Model): 
    mrf_no = models.ForeignKey(MRFDetails) 
    worker_id = models.CharField(max_length=255) 

(私は明確にするため、不要なフィールドを削除しました)。単に私がMRFStatusから得た値のための名前形式の製品テーブルを取得するだけです。

SELECT 
`SandD_mrfstatus`.`mrf_no_id`, 
`SandD_mrfdetails`.`mrf_no`, 
`SandD_mrfdetails`.`product_id_id`, 
`SandD_product`.`product_id`, `SandD_product`.`name`, 
`SandD_product`.`end_product_name` 
FROM `SandD_mrfstatus` 
INNER JOIN `SandD_mrfdetails` 
ON (`SandD_mrfstatus`.`mrf_no_id` = `SandD_mrfdetails`.`mrf_no`) 
INNER JOIN `SandD_product` 
ON (`SandD_mrfdetails`.`product_id_id` = `SandD_product`.`product_id`) 
WHERE `SandD_mrfstatus`.`status` = 0 
ORDER BY `SandD_mrfstatus`.`status` ASC, 
`SandD_mrfstatus`.`modified_datetime` DESC 

は、これは私が私がMRFDetailsおよび製品である値を取得できますか

gg = MRFStatus.objects.all().filter(Q(status__contains=0)).order_by('status','-modified_datetime').select_related() 

を試してきたものです。

print gg.values() 

は、MRFStatusテーブルに関連する値のみを示します。

答えて

1

MRFStatus.objects.filter(status=0).values(
    'mrf_no__mrf_no', 'mrf_no__product_id__name', '' 
    ).order_by('status', '-modified_datetime') 
+0

例えば、二重のアンダースコア__を使用なぜあなたは値の後ORDER_BY入れなかった参照テーブルから値を取得するには? ggで使用したのと同じ文に 'gg.values( 'mrf_no__mrf_no'、 'mrf_no__product_id__name')'を使用するとどうなりますか? –

+0

それはとにかくおかげで働いた:) –

関連する問題