python - Django 连接多个表

标签 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 表相关的值。

最佳答案

要从引用表中获取值,请使用双下划线 __,例如

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

关于python - Django 连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46380578/

相关文章:

python - celery 和mysql的连接

python - 如何使用 Pandas 选择所有非 NaN 列和非 NaN 最后一列?

python - 使用 python-social-auth 和 django-rest-framework 进行 JWT 身份验证

python-2.7 - 将整个文件夹复制到 setup.py 文件中

python - 删除 Tkinter 上小部件的行分隔

python - 我想知道下面代码中 lambda x=x 的用途是什么?

python - 如何避免在 Django 模型上创建外键?

python - django i18n : Make sure you have GNU gettext tools

python - 在 python 中创建一个螺旋数组?

python - 导入错误 : No module named isodate