У меня есть список идентификаторов пользователей, я хочу проверить каждый доступный идентификатор пользователя или нет, если нет, я хочу получить следующий идентификатор, который недоступен - PullRequest
0 голосов
/ 27 января 2020

Вот код, который я пробовал

staffids = [1,2,4,5,6,7]
# up_obj = UserProfile.objects.filter(userId__in = staffids) #i will explain it below 
flag=0
unknown = []
for x in staffids:
    up_obj = UserProfile.objects.filter(userId=x)
    if up_obj.exists():
       print(up_obj)
    else:
       flag=1
       unknown.append({
          "id": x
       })
 if flag == 1:
    return Response({
       STATUS:False,
       MESSAGE:"User not found",
       DATA:unknown
    })

Этот код возвращает только доступных пользователей

up_obj = UserProfile.objects.filter(userId__in = staffids)

предположим, если идентификатор пользователя 3,4 недоступен, этот код возвращает queryset with out 3,4.

Если все идентификаторы отсутствуют, я хочу вернуть сообщение о том, что следующие идентификаторы недоступны или что-то еще ..., я попытался, но я ищу лучший способ для делает это

Есть ли какой-либо метод buildin в django?

1 Ответ

2 голосов
/ 27 января 2020

Вместо того, чтобы делать запрос для каждой записи в staffids, вы можете сделать один запрос для получения всех userId -полей, доступных через UserProfile:

all_user_ids = list(UserProfile.objects.all().values_list('userId', flat=True))

Затем вы можете легко найти разница между этими двумя списками, предоставляя вам информацию о том, какие идентификаторы отсутствуют.

При этом вы можете распечатать, что именно отсутствует или что вы хотите делать с этой информацией.

staffids = [1, 2, 3, 4, 5, 6, 7]
qs = UserProfile.objects.all()
all_user_ids = list(qs.values_list('userId', flat=True))

if not all_user_ids:
    # do something ...
else:
    missing_ids = list(set(staffids) - set(all_user_ids))
    # do something ...

    for obj in qs:
        print(obj)
...