Я не полностью знаю, что django делает с этой моделью (я не использую ORM). Но если я правильно понимаю, это настройка таблицы ассоциации между пользователями и местами, где пользователь указывает, что им нравится место. Если это так, это может быть решено с помощью одного запроса и НЕТ итераций . Как уже упоминалось, я не могу написать django модель / запрос для него, но я даю SQL для этого, вы должны быть в состоянии перевести. Следующее позволяет пользователю указывать «Нравится» или «Не нравится» и обрабатывает случай, когда индикация не была сделана.
select case when exists (select like_dislike
from user_likes ul
where ul.user_id = &user_id_in
and ul.place_id = &place_id_in
)
then (select like_dislike
from user_likes ul
where ul.user_id = &user_id_in
and ul.place_id = &place_id_in
)
else 'Like/Dislike not set'
end "Like/Dislike";
Это также может быть легко преобразовано в функцию Postgres SQL, которая возвращает та же строка
create or replace function User_Likes_Fnc( user_id_in integer
, place_id_in integer
)
returns text
language sql
as $$
select case when exists (select like_dislike
from user_likes ul
where ul.user_id = user_id_in
and ul.place_id = place_id_in
)
then (select like_dislike
from user_likes ul
where ul.user_id = user_id_in
and ul.place_id = place_id_in
)
else 'Like/Dislike not set'
end "Like/Dislike";
$$;
Надеюсь, это поможет, но что бы вы ни выбрали, НЕ итерируйте более 500000 строк, когда это абсолютно не нужно.