Size: a a a

Django [ru] #STAY HOME

2020 May 19

S

Stanley in Django [ru] #STAY HOME
в дату  NULL у тебя прилетел
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
в дату  NULL у тебя прилетел
ну в админке есть дата заказа https://i.imgur.com/Gxxw5FB.png
источник

S

Stanley in Django [ru] #STAY HOME
ты в запрос передал не дату а NULL
CASE WHEN "restaurant_order"."date" IS NULL
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
ты в запрос передал не дату а NULL
CASE WHEN "restaurant_order"."date" IS NULL
я что-то немогу понять как туда правильно отправить дату. It must be in YYYY-MM-DD format.
почему туда NULL вообще приходит?
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
я что-то немогу понять как туда правильно отправить дату. It must be in YYYY-MM-DD format.
почему туда NULL вообще приходит?
принтани дату перед запросом
print(date)
поидее надо к формату БД привести
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
принтани дату перед запросом
print(date)
поидее надо к формату БД привести
там None
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
там None
поэтому и нулл передается, смотри что с фронта летит и куда))
источник

S

Stanley in Django [ru] #STAY HOME
для теста просто перед запросом попробуй date='2020-05-12' передай дату когда есть ордеры и посмотри выход
источник

S

Stanley in Django [ru] #STAY HOME
или запрос принтани
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
для теста просто перед запросом попробуй date='2020-05-12' передай дату когда есть ордеры и посмотри выход
с передачей прямой даты я тестил) работает
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
или запрос принтани
SELECT "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved", C
OUNT(CASE WHEN "restaurant_order"."date" = 2020-05-20 THEN "restaurant_order"."id" ELSE NULL END) AS "cnt" FROM "restaurant_table" LEFT OUTER JOIN "restaurant_order" ON ("restaurant_table"."id" = "restaurant_order"."table_id") GROUP BY "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"
."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved" HAVING COUNT(CASE WHEN ("restaurant_order"."date" = 2020-05-20) THEN "restaurant_o
rder"."id" ELSE NULL END) > 0
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
SELECT "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved", C
OUNT(CASE WHEN "restaurant_order"."date" = 2020-05-20 THEN "restaurant_order"."id" ELSE NULL END) AS "cnt" FROM "restaurant_table" LEFT OUTER JOIN "restaurant_order" ON ("restaurant_table"."id" = "restaurant_order"."table_id") GROUP BY "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"
."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved" HAVING COUNT(CASE WHEN ("restaurant_order"."date" = 2020-05-20) THEN "restaurant_o
rder"."id" ELSE NULL END) > 0
запрос вроде верный получился, на фронт можешь просто id столов отправлять они все будут заняты на дату, но будет трабл если например столов разное количетсво на разные даты. Тогда тебе лучше все столы отправлять с пометкой бронь или нет, в таком случае запрос опять другой будет))))
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
запрос вроде верный получился, на фронт можешь просто id столов отправлять они все будут заняты на дату, но будет трабл если например столов разное количетсво на разные даты. Тогда тебе лучше все столы отправлять с пометкой бронь или нет, в таком случае запрос опять другой будет))))
столы в зале будут только двигатся по X,Y
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
запрос вроде верный получился, на фронт можешь просто id столов отправлять они все будут заняты на дату, но будет трабл если например столов разное количетсво на разные даты. Тогда тебе лучше все столы отправлять с пометкой бронь или нет, в таком случае запрос опять другой будет))))
так запрос верный когда дата за хардкожена)
а что я не так до этого передавал?
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
столы в зале будут только двигатся по X,Y
принтани вот такой запрос
Table.objects.annotate(order=Count('order_table', filter=Q(order_table__date=date)))
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
так запрос верный когда дата за хардкожена)
а что я не так до этого передавал?
смотри как и куда ты с фронта отправляешь дату и где она теряется)
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
принтани вот такой запрос
Table.objects.annotate(order=Count('order_table', filter=Q(order_table__date=date)))
SELECT "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved", C
OUNT(CASE WHEN "restaurant_order"."date" IS NULL THEN "restaurant_order"."id" ELSE NULL END) AS "order" FROM "restaurant_table" LEFT OUTER JOIN "restaurant_order" ON ("restaurant_table"."id" = "restaurant_order"."table_id") GROUP BY "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."s
hape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved"
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
смотри как и куда ты с фронта отправляешь дату и где она теряется)
на фронте пока что формы бронирования нет, чисто дата-пикер и всё, заказы с админки клепаю, для проверки
источник

S

Stanley in Django [ru] #STAY HOME
Boris Krutskih
SELECT "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved", C
OUNT(CASE WHEN "restaurant_order"."date" IS NULL THEN "restaurant_order"."id" ELSE NULL END) AS "order" FROM "restaurant_table" LEFT OUTER JOIN "restaurant_order" ON ("restaurant_table"."id" = "restaurant_order"."table_id") GROUP BY "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."s
hape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved"
вот в этом запросе придут все столы и у каждой записи появится поле order если он есть то будет 1 если нету ордера то 0, на фронте сможешь проверять, только переименуй поле на order_cnt на всякий
Table.objects.annotate(order_cnt=Count('order_table', filter=Q(order_table__date=date)))
проверь верно ли говорю, только дата опять пришла NULL
источник

BK

Boris Krutskih in Django [ru] #STAY HOME
Stanley
вот в этом запросе придут все столы и у каждой записи появится поле order если он есть то будет 1 если нету ордера то 0, на фронте сможешь проверять, только переименуй поле на order_cnt на всякий
Table.objects.annotate(order_cnt=Count('order_table', filter=Q(order_table__date=date)))
проверь верно ли говорю, только дата опять пришла NULL
SELECT "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved", C
OUNT(CASE WHEN "restaurant_order"."date" IS NULL THEN "restaurant_order"."id" ELSE NULL END) AS "order_cnt" FROM "restaurant_table" LEFT OUTER JOIN "restaurant_order" ON ("restaurant_table"."id" = "restaurant_order"."table_id") GROUP BY "restaurant_table"."id", "restaurant_table"."hall_id", "restaurant_table
"."shape", "restaurant_table"."number", "restaurant_table"."seats", "restaurant_table"."width", "restaurant_table"."height", "restaurant_table"."coordinate_x", "restaurant_table"."coordinate_y", "restaurant_table"."is_reserved"

Да, все так же NULL приходит
источник