2017-09-23 75 views
1

我有以下三種模式。 (我已刪除了不必要的字段爲清楚起見)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) 

我想,因爲它的預期從下面的SQL查詢中爲獲取結果。只需獲取名稱表格產品表格,即可獲得來自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 

這是我曾嘗試

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

我怎樣才能像有沒有在MRFDetails和產品的價值。

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.values('mrf_no__mrf_no','mrf_no__product_id__name')'作爲我在gg中使用的相同語句? –

+0

它無論如何謝謝:) –