TypeError: объект 'ModelBase' не является итерируемым при попытке использовать Exclude
У меня есть следующие две модели:
class Listings(models.Model):
CATEGORY = [
("Miscellaneous", "Miscellaneous"),
("Movies and Television", "Movies and Television"),
("Sports", "Sports"),
("Arts and Crafts", "Arts and Crafts"),
("Clothing", "Clothing"),
("Books", "Books"),
]
title = models.CharField(max_length=64)
description = models.CharField(max_length=500)
bid = models.DecimalField(max_digits=1000000000000, decimal_places=2)
image = models.URLField(null=True, blank=True)
category = models.CharField(max_length=64, choices=CATEGORY, default=None)
user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
class CloseListing(models.Model):
listings = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
Я хочу иметь возможность запросить все объекты каждого объявления, которое не находится в модели CloseListing. Как я могу это сделать?
def index(request):
listings = Listings.objects.all().exclude(id__in=CloseListing)
return render(request, "auctions/index.html",{
"listings": Listings.objects.all()
})
сообщение об ошибке: TypeError: 'ModelBase' object is not iterable
из-за listings = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
.
Вы не должны запрашивать напрямую через модель, которая является CloseListing
, вы можете сначала отфильтровать все близкие объявления из модели CloseListing
, затем исключить все те объявления, которые находятся в CloseListing
по exclude()
.
views.py
def index(request):
close_listings = CloseListing.objects.all()
listings=Listings.objects.exclude(id__in=close_listings)
return render(request, "auctions/index.html",{
"listings": listings
})