Django加入多个表

时间:2017-09-23 14:21:51

标签: python django python-2.7

我有以下三种型号。 (为清楚起见,我删除了不必要的字段)

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和Product中的值。

print gg.values()

仅提供与MRFStatus表相关的值。

1 个答案:

答案 0 :(得分:1)

从参考表中获取值使用双下划线__,例如

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