Найти - Пользователи
Полная версия: Это норма?
Начало » Django » Это норма?
1 2
FishHook
gorynych0
Да японский бог, не надо никаких дополнительных таблиц, просто на основании имеющихся данных продаж дайте мне выборку по дням, когда продаж не было. Одна таблица. Один результат.
gorynych0
FishHook
Я удалил дополнительную таблицу. Итак, вот что я сумел написать для достижения нашей задачи:
 def no_sellings(request):
    sells = []
    for sell in Selling.objects.all():
        if (sell.selling_date.day, sell.selling_date.month, sell.selling_date.year) not in sells:
            sells.append((sell.selling_date.day, sell.selling_date.month, sell.selling_date.year))
    return HttpResponse(str(sells)

 Вывод: [(26, 12, 2017), (27, 12, 2017), (11, 10, 2017)])

Цель задачи:
Найти дни в которых не было продаж. Итак, у нас есть 3 дня в которых продажи были + у нас есть возможность произвольного выбора дня продажи (будь это хоть 2 век д.н.э), итого у нас есть все прочие дни за исключением 3 наших дней. Осталось их вывести.


Если серьёзно:
Я мог бы добавлять в 23:59 ежедневно, как день окончания дня ( для этого нужно создать отдельную таблицу days ), добавить логику в модель продажи, чтоб она изменяла значение there_is_selling в записи days, если продаж нету days в 23:59 записывалась как there_is_selling=False, если продажи были, то записывалась как there_is_selling=True, после, просто выводил бы записи с there_is_selling=False.
Только я не знаю как оптимизировать событие, что будет выполняться в 23:59, каждую минуту проверка на время? Мне кажется это глупо.
FishHook
gorynych0
Если серьёзно:
Я мог бы добавлять в 23:59 ежедневно, как день окончания дня ( для этого нужно создать отдельную таблицу days ), добавить логику в модель продажи, чтоб она изменяла значение there_is_selling в записи days, если продаж нету days в 23:59 записывалась как there_is_selling=False, если продажи были, то записывалась как there_is_selling=True, после, просто выводил бы записи с there_is_selling=False.
Только я не знаю как оптимизировать событие, что будет выполняться в 23:59, каждую минуту проверка на время? Мне кажется это глупо.

Я повторяю. Так делать нельзя. У вас программа работает пять лет. Через пять лет заказчик просит дать ему сабжевый отчет, и вы не сможете этого сделать потому что у вас нет данных.

Итак, вот что я сумел написать для достижения нашей задачи:
Очень, очень плохое решение. Ну представьте, у нас пять лет работы фирмы, в среднем сто продаж в день. Это примерно 200 000 записей. Когда вы делаете вот так
 sells = []
....
 for sell in Selling.objects.all():
...
    if .... not in sells:
вы получите 40 миллиардов итераций по списку sells, ваш отчет будет строиться месяц. А решается задача одним SQL запросом.


Я не вижу смысла продолжать беседу. Вы спрашивали, что нужно знать на бэкенде. Вот вам ответ. Вы не знаете простейшего в программировании, не понимаете какие структуры данных использовать в каких случаях, не имеете представления о сложности алгоритмов. Вы не понимаете как работать с БД и что такое эффективность запросов. Не знаете sql. Даже ваш наивный код не решает поставленную задачу, потому что вы отдаете массив дат, в которых были продажи, а в ТЗ нужен массив дат, в которых их не было.
Вы научились подставлять данные в шаблоны и считаете, что это и есть “бэкенд”?

gorynych0
FishHook
Где вы возьмёте записи дней без продаж? Запись продажи проходит во время покупки пользователем товара. Про то, чтобы перекласть всю работу БД я подумал в первую очередь.
FishHook
gorynych0
вы знаете что такое group by?
gorynych0
FishHook
Нет, я вроде говорил, что начинающий в back-end, бд знаю на базовом уровне ( создай таблицу, выведи столбец).
FishHook
gorynych0
Вы получили ответ на свой изначальный вопрос?
gorynych0
FishHook
Можно сказать Да. Обработка информации на сервере.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB