2013-08-16 3 views
0

내 쿼리에 다른 테이블의 열을 포함하고 싶습니다. 보고서의 모든 열과 제품 및 제조업체의 이름 열을 출력에 포함하고자합니다.Django 1.5 다른 모델의 열을 포함하는 쿼리

나의 현재 쿼리는 다음과 같습니다

latest = Report.objects.values('date').latest('date')['date'].strftime('%Y-%m-%d')`] 
rows = Report.objects.filter(date=latest).order_by('platform') 

-

# 
class Manufacturer(models.Model): 
id = models.AutoField(primary_key=True) 
name = models.CharField(blank=False,null=False,unique=True,max_length=100) 
comment = models.CharField(blank=True,null=True,max_length=200) 
def __unicode__(self): 
    return u'%s' % self.name 

# 
class Product(models.Model): 
id = models.AutoField(primary_key=True) 
name = models.CharField(blank=False,null=False,unique=True,max_length=100) 
manufacturer = models.ForeignKey(Manufacturer,related_name="products",null=True,blank=True) 
comment = models.CharField(blank=True,null=True,max_length=200) 
timestamp = models.DateTimeField(auto_now_add=True) 
def __unicode__(self): 
    return u'%s' % self.name 

# 
class Part(models.Model): 
id = models.AutoField(primary_key=True) 
name = models.CharField(blank=False,null=False,unique=True,max_length=100) 
product = models.ForeignKey(Product,related_name="parts",null=True,blank=True) 
comment = models.CharField(blank=True,null=True,max_length=200) 
timestamp = models.DateTimeField(auto_now_add=True) 
def __unicode__(self): 
    return u'%s' % self.name 

# 
class Platform(models.Model): 
id = models.AutoField(primary_key=True) 
name = models.CharField(blank=False,null=False,unique=True,max_length=100) 
comment = models.CharField(blank=True,null=True,max_length=200) 
timestamp = models.DateTimeField(auto_now_add=True) 
def __unicode__(self): 
    return u'%s' % self.name 

# 
class Report(models.Model): 
id = models.AutoField(primary_key=True) 
part = models.ForeignKey(Part,related_name="reports") 

답변

1

에 해당 요소를 포함시킬 필요는 없습니다. 실제로, 이미 가지고 있습니다 : 관련된 객체을 검색하면됩니다. 코드와

, 최신 당신은 너무 템플릿에서 해당 요소에 액세스 할 수 있습니다

# in any *.py files, such as views.py 
for report in rows: 
    # You can access the Part object, so you can access Product, 
    # so you can access Manufacturer, just by hooking through the reverse relationship 
    product_name = report.part.product.name 
    manufacturer_name = report.part.product.manufacturer.name 

모델에 외래 키가 보고서 모델에 검색어 세트입니다

# in your template.html 
{% for report in rows %} 
<p>Part: <span>{{ report.part }}</span></p> 
<p>Product: <span>{{ report.part.product.name }}</span></p> 
<p>Manufacturer: <span>{{ report.part.product.manufacturer.name }}</span></p> 

보시다시피, 모든 것이 이미 y와 함께 제공됩니다. 우리 queryset.

+0

정확하게 내가 필요한 것 .... 템플릿에 row.part.product.name/row.part.product.manufacturer.name을 넣는 것이 내가 찾고있는 것입니다. 고맙습니다. –

0

당신은 report.part.product.namereport.part.product.manufacturer.name를 사용하여 보고서에 대한 제품 및 제조업체 이름을 얻을 수 있습니다.

그래서 당신은 (현재 쿼리를 사용) 할 수있는 :

for report in rows: 
    product_name = report.part.product.name 
    manufacturer_name = report.part.product.manufacturer.name 

그것을 할 더 나은 방법이 있습니다,하지만 당신은 당신이 일해야하므로 이름으로 수행 할 작업에 따라 달라집니다 도움이 필요하시면 조금 더 구체적으로 말씀하십시오. 간단한 for 루프를 사용하여 끝내려면 select_related을보고 rows의 모든 보고서에 대해 추가 쿼리를 실행하지 않는 것이 좋습니다.

관련 문제