Django IN Запрос с различными значениями комбинации двух столбцов

Мне нужно отфильтровать пользователей из различных комбинаций города и штата, например Пользователи из городов [[Мумбаи, MH],[Ахмадабад, GJ],...]

Где город = Мумбаи и штат = MH

Вот что я делаю сейчас

 users = cls.objects.annotate(unique_city=ExpressionWrapper(Concat(F('city'),F('state'),output_field=CharField()), output_field=CharField())).filter(unique_city__in = city_list)

where city_list = [MumbaiMH,AhemadabadGj,...]. Есть ли лучший способ сделать это

У меня есть модель пользователя с полем state и city

И модель города с полем state и city (уникальные вместе)

Вы можете использовать Q объекты вместо этого.

Задан список кортежей searchlist = [(city1, state1), (city2, state2), ...]

if len( searchlist) == 0:
    query = cls.objects.none()

else:
    city, xstate = searchlist[0]
    q = Q( city=city, state=xstate)

    for city, xstate in searchlist[1:] :
         q = q | Q( city=city, state=xstate)

    query = cls.objects.filter( q)

Примечание: использую xstate, а не state, потому что SO auto-colorizing делает очень странные вещи, если я использую state. Она думает, что это зарезервированное слово, хотя в Python это не так?

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