Запрос в Django для сортировки в одной таблице на основе результата другой таблицы

У меня есть две модели модель листинга:

class listing(models.Model):
    productTitle= models.CharField(max_length=60)
    description = models.TextField()
    category = models.ForeignKey(category,on_delete=models.CASCADE,null=True)
    productPrice = models.FloatField(default=0.0)
    
    def __str__(self):
        return self.productTitle

модель моего списка часов:

    item = models.ForeignKey(listing, on_delete= models.CASCADE)
    watchlist = models.BooleanField(default=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.item

В моем файле index.html Я хочу показать элемент списка, если атрибут watchlist равен False.

Теперь мой views.py для index.html выглядит следующим образом:

def index(request):
    if request.user != "AnonymousUser":
        items= listing.objects.exclude(id=watchlist.objects.filter(user=request.user))
    else:
        items = watchlist.objects.all()
    context = {'items':items}
    return render(request, "auctions/index.html", context)

Я не смог отфильтровать элементы в модели листинга на основе результата модели watchlist, т.е. если watchlist=True, то я не хочу выводить элементы на index.html. Потому что я хочу выводить элементы watchlist на отдельных страницах. Как сделать запрос в django, если используются две модели?

Вы, вероятно, могли бы сделать что-то вроде этого

watch_list = watchlist.objects.filter(wishlist=False, user=request.user.id).values('item')

Затем, если вы хотите получить элементы, вы делаете следующее

items = listing.objects.filter(id__in=watch_list)
from django.db.models import Q    
items = listing.objects.filter(watchlist__isnull=True) | listing.objects.filter(Q(watchlist__user=request.user) & Q(watchlist__watchlist=False))

Если я правильно понимаю, вам нужно перечислить элементы, которых нет в таблице watchlist. Вы можете использовать обратное отношение в запросе. watchlist__isnull=True предназначен для перечисления записей, отсутствующих в таблице watchlist. Вторая часть listing.objects.filter(Q(watchlist__user=request.user) & Q(watchlist__watchlist=False) является фильтром списка часов

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