Итерация над объектом модели в шаблоне не дает результатов - Django

Это моя модель:

    pass

class Listing(models.Model):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=500)
    url = models.URLField()
    live = models.BooleanField(default=True)
    author = models.ForeignKey('User', on_delete=models.CASCADE, name='author')
    category = models.ForeignKey('Category', on_delete=models.CASCADE, name='category', default="")

    def __str__(self):
        return f'{self.id}: {self.title}'

class Bid(models.Model):
    price = models.DecimalField(decimal_places=2, max_digits=10)
    bid_count = models.IntegerField()
    highest_bidder = models.ForeignKey('User', on_delete=models.PROTECT, name="highest_bidder", default=None, blank=True, null=True)
    listing = models.ForeignKey('Listing', on_delete=models.CASCADE, name='listing', default="")

    def __str__(self):
        return f'{self.listing.title} ({self.price})'


class Category(models.Model):
    title = models.CharField(max_length=200)

    def __str__(self):
        return self.title

class Watchlist(models.Model):
    user = models.ForeignKey('User', on_delete=models.CASCADE, name='user')
    item = models.ManyToManyField('Listing', blank=True, null=True)

    def __str__(self):
        return f"{self.user}'s Watchlist" 

Вот мое мнение:

    currentUser = request.user
    watchlist = Watchlist.objects.filter(user=request.user).values()
    bids = Bid.objects.all()
    return render(request, 'auctions/userWatchlist.html', {
        'currentUser': currentUser,
        'watchlist': watchlist,
        'bids': bids
    })

Я также пробовал не передавать .values() и использовать .all в шаблоне вместо этого. Вот шаблон:


{% block body %}

<h2>Watchlist</h2>
<div class="container">
    <div class="row">
        {% for listing in watchlist %}
        <div>{{ listing }}</div>
        <div class="col">
            <div class="card" style="width: 18rem;">
                <img src="{{ listing.item.url }}" class="card-img-top" alt="{{ listing.item.title }}">
                <div class="card-body">
                    <h5 class="card-title">{{ listing.item.title }}</h5>
                    <p class="card-text">{{ listing.item.description }}</p>
                    {% for bid in bids.all %}
                    {% if bid.listing == listing.item %}
                    <p class="card-text">Bid price: {{ bid.price }}</p>
                    {% endif %}
                    {% endfor %}
                    <a href="{% url 'item_details' listing.id %}" class="btn btn-primary">Item Details</a>
                </div>
            </div>
        </div>
        {% endfor %}
    </div>
</div>

 
{% endblock %} 

При том, как все сейчас устроено выше, вот что возвращается на страницу: Code Results on Watchlist page

Вы можете видеть, где я проверяю результаты цикла for, чтобы увидеть, что хранится в листинге, чтобы попытаться понять, почему listing.item.url не заполняется. Из этого результата видно, что это происходит потому, что в листинге нет элемента. Если это поможет, вот как я создаю элементы списка наблюдения:

    item = Listing.objects.get(pk=item_id)
    bid = Bid.objects.get(listing=item)
    form = NewBidForm()
    onWatchlist = None
    if Watchlist.objects.filter(user=request.user, item=item_id).exists():
        Watchlist.objects.filter(user=request.user, item=item_id).delete()
        onWatchlist = False
    else:
        watchlist, _ = Watchlist.objects.get_or_create(user=request.user)
        watchlist.item.add(item)
        onWatchlist = True
    return render(request, 'auctions/itemDetails.html', {
        'item': item, 
        'bid': bid, 
        'form': form,
        'onWatchlist': onWatchlist
    })

Я не понимаю, почему я не могу получить доступ к полю элемента (связанному с правильными полями листинга) в объекте Watchlist. Связано ли это с тем, что это отображение "многие ко многим"?

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

Если вам нужна еще какая-то помощь, пожалуйста, дайте мне знать(:

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