Django: Получение последнего значения по дате из связанной модели в html

Привет всем

У меня возник вопрос:

Итак, в обзоре родительского продукта я показываю название продукта и его URL, но есть также связанная модель с этой родительской моделью, которая хранит историю цен с течением времени.

Что я хочу сделать, это показать также последнюю цену в моей таблице, вот мой код:

models.py:

class Product(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=100, default=None, null=True, blank=True)
    url = models.CharField(max_length=255, default=None, null=True, blank=True)
    creation_date = models.DateTimeField(auto_now_add = True)
    update_date = models.DateTimeField(auto_now = True)


class PriceHistory(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    product_info  = models.ForeignKey(Product, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=20, decimal_places=2)    
    creation_date = models.DateTimeField(auto_now_add = True)

Мой views.py

@login_required
def overview(request):
    all_products = PersonalisedTrackingInfo.objects.filter(user=request.user)
    general_context = {'all_products': all_products}
    return render(request, 'overview.html', general_context)    

и мой html

    <h4>Overview Products</h4>
        <table>
          <thead>
            <tr>
              <th>#</th>
              <th>Name</th>
              <th>Url</th>
              <th>Last price</th>
            </tr>
          </thead>
          <tbody>
            {% for product in all_products %}   
                <tr>                    
                <td>{{ forloop.counter }}</td>
                <td>{{ product.name }}</td>
                <td>{{ product.url }}</td>
                <td>{{ product.id.price}}</td>
                <td></td>
                {% endfor %}
              </tr>
          </tbody>
        </table>


Мой вопрос: как получить последнюю цену вместе с товаром в моем html обзоре? Я пробовал с {{ product.id.price}}. Я думаю, что я не далеко ушел, но не могу разобраться с этим.

Большое спасибо!

Вы можете получить самую последнюю историю цен, используя обратный аксессор, упорядочивая по дате создания и выбирая первый объект в наборе запросов:

latest_price_history = product.pricehistory_set.order_by('-creation_date').first()

Что касается того, как вы поместите это в ваш шаблон, вы можете добавить это как метод модели, например, так:

class Product(models.Model):
   ...

   @property
   def latest_price(self):
      return self.pricehistory_set.order_by('-creation_date').first().price

Затем в своем шаблоне вы можете вызвать его следующим образом:

{{ product.latest_price }}
Вернуться на верх