Как вывести значения модели, объединенной через внешний ключ в django?

У меня есть одна модель, названная как элемент следующим образом:

class Item(models.Model):
 title = models.CharField(max_length=100)
 price = models.FloatField()
 bargainprice = models.FloatField(default=0)
 discount_price = models.FloatField(blank=True, null=True)
 category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
 label = models.CharField(choices=LABEL_CHOICES, max_length=1)
 slug = models.SlugField()
 description = models.TextField()

 image = models.ImageField()

и есть страница продукта под названием "product.html", которая показывает текущую информацию о продукте, как показано на изображении : изображение страницы продукта

и я получаю все эти данные в product.html с помощью представления следующим образом :

class ItemDetailView(DetailView):
model = Item
template_name = "product.html"

и в product.html я получаю данные с помощью синтаксиса :

         <span class="mr-1">
          <del>₹ {{ object.price }}</del>
        </span>
        <span>₹ {{ object.discount_price }}</span>

Это одна история, которая работает нормально без проблем, пока не **проблема начинается, когда я создаю эту модель Bargain ниже **

class Bargain(models.Model):
    user = models.ForeignKey(
       settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
         )
    item = models.ForeignKey(
        Item,
        on_delete=models.CASCADE
        )
    bprice = models.FloatField()



    class Meta:
        constraints = [
            models.UniqueConstraint(
               fields=['item', 'user'], name='unique_user_item')
         ]

* позвольте мне объяснить цель этой модели сделки. фактически эта модель используется для того, чтобы торговаться о цене продукта, она принимает входную цену от пользователя и обновляет модель сделки со следующими значениями User, Item и "bprice", которая является новой ценой продукта после торгов *

и я успешно создал объект "Bargain object (3)" в модале со значениями, показанными на изображении: изображение значений модала

**so what i need - if user have bargained the price product.html show the bargain price which is "bprice" in the Bargain modal instead of product price in Item modal** of the respective user**

для достижения этого я изменил свой itemView следующим образом :

class ItemDetailView(DetailView):
    model = Item
    template_name = "product.html"
     
    def get_bargain(self, request):
      if request.user.is_authenticated():
         return Bargain.objects.filter(item=self.object, user=request.user).first()

и в product.html я делаю следующее :<h1>This is the {{ view.get_bargain.bprice }}</h1>

*но это ничего не дает. больше информации - вошедший пользователь admin

Может ли кто-нибудь подсказать мне, что я делаю неправильно или какой-нибудь другой способ сделать это? Заранее спасибо.

здесь вы можете расширить ваше представление с LoginRequiredMixin если ваше представление ограничено для вошедших в систему пользователей. Тогда вы можете указать имя контекстного объекта "item", как показано ниже.

class ItemDetailView(LoginRequiredMixin, DetailView):
    model = Item
    template_name = "product.html"
    context_object_name = "item"
 
    def get_object(self, queryset=None):
          return get_object_or_404(self.model, pk=self.kwargs['pk'])

и в вашем шаблоне вы можете получить все выгодные предложения, связанные с этим товаром. Подобно.

{% if item.bargain %}
     <h1>This is the {{ item.bargain.first.bprice }}</h1>
{% else %}
     <h1> no bargain against this item </h1>
{% endif %}

Подробности: item - это элемент контекста. и item.bargain.first дает вам доступ к первому элементу сделки.

Вернуться на верх