Как запросить 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 учусь.

С уважением,

Давид

Вернуться на верх