Данные ManyToManyField не отображаются

Добрый день,

У меня возникла проблема с добавлением листинга в список просмотра определенного пользователя. Есть советы, как я могу это исправить? Я пытался создать отдельную модель, которая наследуется от модели листинга.

Структура модели

class Listing(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT, default='',  null=True )
    title = models.CharField(max_length=200)
    description = models.TextField()
    image = models.ImageField(upload_to='media/')
    price = models.FloatField()
    category = models.ForeignKey(Category,on_delete=models.CASCADE,default='')
    # a listing can have multiple watchers and a watcher can have multiple listings
    watchers = models.ManyToManyField(User,blank=True,null=True,related_name="listings")
    
    def __str__(self):
        return "%s" % (self.title)

Код представления

def listing(request, id):
    comment_form = AddComment()
    bid_form = AddBid()
    listing =  Listing.objects.get(id=id)
    if request.method == "POST":
        if "watchlistBtn" in request.POST:
            listing.watchers.add(request.user)
            listing.save()
    return render(request, "auctions/listing.html", {
        "listing": listing,
        "comment_form": comment_form,
        "bid_form": bid_form
    })


# watchlist

@login_required(login_url='/login')
def watchlist(request):
    listings = request.user.listings.all()
    
    return render(request,"auctions/watchlist.html", {
        "listings": listings
    })

Код шаблона формы

 <form action="{% url 'watchlist' %}" method="post">
            {% csrf_token %}
            <input type="submit" value="Add to Watchlist" class="btn btn-primary" name="watchlistBtn">
        </form>

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

Listing.objects.all().first().watchers.all()
# ^ or something similar

И если это так, вы всегда можете захватить Листинги другим способом:

listings = Listing.objects.filter(watchers__in=[request.user])

по сути одно и то же

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