values_list
возвращает список значений, поэтому у вас нет набора запросов при оценке выражения, у вас буквально есть список первичных ключей.Вы будете использовать это, когда хотите добавить, скажем, просто поле модели и выполнить итерацию по нему, чтобы выполнить какую-то оценку.Рабочая лошадка для поиска существующего предложения здесь сделана с помощью операторов filter
.
Поскольку вы предполагаете, что есть одно (и только одно совпадение), лучше сделать:
existing_proposal = Contract.objects.filter(users__in=[user_1, user_2]).filter(listing_id=listing).only('id').first()
Возвращает первый Contract
объект, который соответствует критериям вашего фильтра, с его id
, который вам необходим для перенаправления на него.
Затем для назначения в вашемперенаправление:
{'pk': existing_proposal.pk}
only
не является обязательным, но почему бы не оптимизировать вызов?