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( ...)