Django find в поле типа json со значением типа int или str

У меня есть поле типа Json в модели, но я не могу быть уверен, целое ли это число или строка, длинная версия, которая работает, следующая:

cars = Car.objects.filter(
   user_id=self.user_id,
   car_type=self.car_type,
   facture__facture_id=1,
)
if len(cars) == 0:
    cars = Car.objects.filter(
       user_id=self.user_id,
       car_type=self.car_type,
       facture__facture_id=1,
    )

Но я хочу не повторять весь блок, и я хочу знать, есть ли другой способ, например:

Car.objects.filter(
   user_id=self.user_id,
   car_type=self.car_type,
   facture__facture_id=1 | facture__facture_id='1',
)

Используйте Q объекты для логики "ИЛИ" (с оператором |) ( также здесь)

Что-то вроде

cars = Car.objects.filter(
   user_id=self.user_id,
   car_type=self.car_type,
).filter( 
   Q( facture__facture_id=1 ) | Q( facture__facture_id='1' ) 
)

(только я не знаю, как может возникнуть эта неопределенность. Это поле CharField или IntegerField? Я могу понять необходимость использования Q для работы с вариантами поля CharField).

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

cars_base_qs = Car.objects.filter(
    user_id=self.user_id,
    car_type=self.car_type )
...
cars = cars_base_qs.filter( ...)
Вернуться на верх