我有以下情况。Flight模型(flights)有一个名为"airlines_codes"(TextField)的字段,我将数据存储在JSON数组中,格式如下:
["TB", "IR", "EP", "XX"]
我需要按2个字母的航空公司代码(IATA格式)过滤航班,例如'XX',我像这样简单但成功地实现了这一点:
filtered_flights = Flight.objects.filter(airlines_codes__icontains='XX')
这是伟大的,但实际上不是。我有航班,其中airlines_codes看起来像这样:
["TBZ", "IR", "EP", "XXY"]
这里有3个字母的代码(ICAO格式),显然上面的查询过滤器不起作用。
p。我不能移动到PostgreSQL,我也不能改变无论如何数据库。这只能通过一些查询来实现。
谢谢你的建议。
在不以任何方式改变数据库的情况下,您需要将值过滤为字符串。你最好的选择是airlines_codes__contains
。以下是我的建议,假设您的列表总是按照您所表示的方式进行清理。
Flight.objects.filter(airlines_codes__contains='"XX"')
从Django 3.1开始,JSONField
在更广泛的数据库上得到支持。理想情况下,对于从头开始构建类似系统的其他人来说,该字段将是更可取的方法。