Данные 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])
по сути одно и то же