我希望在我的查询中包含其他表中的列。 我希望在报告中包含报告中的所有列以及产品和制造商中的名称列。
我当前的查询如下所示:
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")
答案 0 :(得分: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>
正如您所看到的,查询集中已经包含了所有内容。
答案 1 :(得分: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
中的每个报告触发额外查询。