Как запросить jsonb-столбец в PostgreSQL с помощью Python и Django
Я просмотрел множество решений здесь и в других местах, но я не могу заставить свой код работать, что бы я ни пробовал.
Итак, у меня есть база данных PostgreSQL с приложением Django, и один из столбцов в одной из моих таблиц, employee_schedules, имеет тип данных jsonb. В модели Django он имеет тип JSONField:
day1_actual_punches = models.JSONField(null=False, default=dict)
day2_actual_punches = models.JSONField(null=False, default=dict)
day3_actual_punches = models.JSONField(null=False, default=dict)
day4_actual_punches = models.JSONField(null=False, default=dict)
day5_actual_punches = models.JSONField(null=False, default=dict)
day6_actual_punches = models.JSONField(null=False, default=dict)
day7_actual_punches = models.JSONField(null=False, default=dict)
В базе данных PostgreSQL day1_actual_punches хранится следующим образом:
"{\"EmpCode\":\"A00X\",\"FullName\":\"ABBY SENSENBAUGH\",\"InPunchTime\":\"2021-09-26 16:57:00\",\"OutPunchTime\":\"2021-09-26 22:48:00\",\"PayRate\":\"6.00\",\"OvertimePayRate\":\"9.00\",\"PayType\":\"HOURLY\",\"ScheduleType\":\"Food and Beverage\",\"EmpPosition\":\"Server PM\",\"DateTimeIn1\":\"2021-09-26 4:57 PM\",\"DayNumber\":1,\"WeekStartDate\":\"2021-09-26 16:57:00\",\"PunchDayIndex\":6,\"HoursWorked\":\"5.85\"}"
Я использую следующее для тестирования получения записи из базы данных, используя консоль python, вот так, следуя Django документации по запросу jsonb данных.
results = EmployeeSchedule.objects.filter(day1_actual_punches__EmpCode='A00X')
Но Queryset всегда возвращается пустым, хотя я вижу запись в таблице.
Это из-за того, как я сохраняю дикту в базе данных, что вызывает косые черты или что-то еще? Вот пример кода сохранения записи в базу данных:
empschedule_new = EmployeeSchedule()
if self.day_number == 1:
empschedule_new.day1_actual_punches = json.dumps(dict_time_punches, separators=(',', ':'))
При печати данные внутри dict_time_punches выглядят следующим образом, просто чтобы вы знали, для чего я использую json.dumps:
{
EmpCode: "A00X",
FullName: "ABBY SENSENBAUGH",
InPunchTime: "2021-09-28 16:57:00",
OutPunchTime: "2021-09-28 22:48:00",
PayRate: "0.00",
OvertimePayRate: "0.00",
PayType: "HOURLY",
ScheduleType: "Food and Beverage",
EmpPosition: "Server PM",
DateTimeIn3: "2021-09-28 4:57 PM",
DayNumber: "3",
WeekStartDate: "2021-09-26 16:57:00",
PunchDayIndex: "1",
HoursWorked: "5.85"
}
Я уверен, что упускаю что-то очень важное, но не могу понять. Я еще многому в Django учусь.
С уважением,
Давид