2013-06-06 31 views
0

兩個表如何在Django如何選擇結果的形式在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) 

但未能....任何想法有什麼錯我

+0

什麼不成? 'pcc = ProductCabinetConstruction.objects.select_related(「product」)。filter(product__id = productObj.id)'應該工作。如果你想訪問該對象,那麼你可以訪問'pcc.product'。 'select_related'不會影響結果,它只是幫助提高查詢效率 –

+0

試試這個'models.ProductCabinetConstruction.objects.values('cabinet_construction__cabinet_name')。filter(product__id = productObj.id).distinct()' –

回答

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 
+0

但我的MySQL查詢 - 「選擇DISTINCT(cabinet.cabinet_name),product_cabinet_construction.product_id從product_cabinet_construction,cabinet WHERE product_cabinet_construction.product_id = 33」將返回所有cabinet_name,如果它不存在於cabinet_construction中。如果我們將它切換到Django,它只返回來自cabinet和cabinet_construction的常見值:( – abhis

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')