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 это не так?