如何在django中选择两个表格的结果

时间:2013-06-06 09:32:26

标签: django django-models

如何在Django中选择两个表的结果

我的模型如下,

from django.db import models
from apps.admin.product.models import Product

class Cabinet(models.Model):
    id = models.IntegerField(primary_key=True)
    cabinet_name = models.CharField(max_length=45L, blank=True)
    class Meta:
        db_table = 'cabinet'




class ProductCabinetConstruction(models.Model):
    id = models.IntegerField(primary_key=True)
    product = models.ForeignKey(Product, null=True, blank=True)
    cabinet_construction = models.ForeignKey(Cabinet, null=True, blank=True)
    size = models.FloatField(null=True, blank=True)
    class Meta:
        db_table = 'product_cabinet_construction'

我想按如下方式执行mysql查询,

SELECT DISTINCT (cabinet.cabinet_name), product_cabinet_construction.product_id FROM product_cabinet_construction, cabinet WHERE product_cabinet_construction.product_id = 33

并尝试

models.ProductCabinetConstruction.objects.select_related().filter(product=productObj.id)

但失败了....任何想法我的错误

2 个答案:

答案 0 :(得分:0)

我不知道为什么你的代码不起作用....代码中没有错误   该代码将返回一个包含ProductCabinetConstruction列表的查询集   你必须循环这个qieryset以获得每个元素

我认为你没有使用循环获取每个元素

pcc = ProductCabinetConstruction.objects.select_related().filter(product=33)

像这样循环获取每个元素

for productcc in pcc:
    pro = productcc.product #is the product
    cab = productcc.cabinet_construction  # is the cabinet

答案 1 :(得分:0)

试试这些:

ProductCabinetConstruction.objects.select_related('product', 'cabinet_construction').filter(product__product_id=33).distinct('cabinet_construction__cabinet_name')

ProductCabinetConstruction.objects.values('cabinet__cabinet_name', 'product__product_id').filter(product__product_id=33).distinct('cabinet_construction__cabinet_name')