【问题标题】:Django: loop all the records in a table and then get field from another tableDjango:循环一个表中的所有记录,然后从另一个表中获取字段
【发布时间】:2020-05-06 16:54:27
【问题描述】:

我有两个名为 Buy 和 Sell 的类模型:

class Buy(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    image = models.FileField()
    date = models.DateField()
    buy_price = models.DecimalField(max_digits=6, decimal_places=2)
    sell_price = models.DecimalField(max_digits=6, decimal_places=2)

    def __str__(self):
        return str(self.id)



class Sell(models.Model):    
    item = models.OneToOneField(Buy, on_delete=models.CASCADE)
    date = models.DateField()
    discount = models.DecimalField(max_digits=6, decimal_places=2)
    total_paid = models.DecimalField(max_digits=6, decimal_places=2)
    buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.item)

在模板中,我想显示 Sell 表中的所有记录以及 Buy 表中的图像类属性。

下面是我的view.py:

def sell(request):
    buys = []
    sells = Sell.objects.order_by('-id')
    for sell in sells:
        buys.append(Buy.objects.filter(id=str(sell.item)))
    context = {'sells': sells, 'buys': buys}
    return render(request, 'sell.html', context)

模板:

        {% for sell in sells %}
        <tr>
            <td>{{ sell.item }}</td>
            <td>{{ sell.date|date:'d-m-Y' }}</td>
            <td>{{ buys[0].image}}</td>
            <td>R$ {{ sell.discount }}</td>
            <td>R$ {{ sell.total_paid }}</td>
            <td>{{ sell.buyer }}</td>
        </tr>
        {% endfor %}

我想知道是否有一种简单的方法可以做到这一点。我的 view.py 需要一些帮助!

【问题讨论】:

  • 不相关,但这个for 循环会很快变坏。也许尝试这样的事情:buys = sells.select_related("item").values_list("item", flat=True)

标签: python django


【解决方案1】:

您可以访问模板内与Sell相关的Buy实体

{{sell.item.image}}

如果image 字段是顾名思义的图像,您可能希望将该字段更改为ImageField

那么显示图像的代码是:

<img src="{{ sell.item.image.url }}">

(找到here

【讨论】:

  • 如果 {{ sell.item.image ]} 在 for 循环中,请在视图中的查询集上使用 select_related。参考select_related docs
猜你喜欢
  • 2010-12-31
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多