0

我希望在我的查询中包含其他表中的列。我希望在我的输出中包含报告中的所有列以及产品和制造商中的名称列。

我当前的查询如下所示:

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")
4

2 回答 2

1

您实际上不需要QuerySet 中包含这些元素。事实上,您已经拥有它们:您只需要检索相关对象

使用您的代码,latestrowsReport模型上的查询集,它们在Part模型上有一个外键

# 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>

如您所见,所有内容都已随您的查询集一起提供。

于 2013-08-16T18:23:16.817 回答
0

您可以使用report.part.product.name和获取报告的产品和制造商名称report.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.

于 2013-08-16T18:21:21.307 回答