Size: a a a

Django [ru] #STAY HOME

2020 July 15

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
Не смогу фулл скинуть. Это с работы проект так что только части и только скринами
а если цепочкой выстроить фильтры, то будет правильно собирать запрос?
Помню, у меня как-то не хотел применяться второй подряд .filter(). Вот просто не было условия в запросе.

Если работает, то можно:
1. присвоить базовый запрос в переменную
2. сделать if, под который убрать добавление нового условия
3. И так для всех условий

Но это если не нужены условия с None
источник

S

Saydi in Django [ru] #STAY HOME
Sultanbek
Добрый вечер , подскажите пожалуйста с одной задачей на удаление из БД. Есть записи ,где хранятся номер телефона, имя ,фамилия ,город , и текст какой-то. Но на сайте нету регистрация, решено было удалять через фамилию и номер телефона. То есть на сайте не будет публиковаться фамилия и если человек захочет удалить то должен будет вести ключовое слово фамилию и потом уже номер и если действительно окажется что запись сделано с этой фамилией , то запись удаляется , а если не совпадает то отказ. Но дело в том что не могу реализовать это в views.py , как сравнивать то что будет отправлено через форму с записью из БД и удалять
Model.objects.filter(last_name=form.cleaned_data['last_name'], phone...).delete()
Но получается любой человек знающий телефон и фамилию может удалить?
источник

S

Sultanbek in Django [ru] #STAY HOME
Saydi
Model.objects.filter(last_name=form.cleaned_data['last_name'], phone...).delete()
Но получается любой человек знающий телефон и фамилию может удалить?
Да всё верно )😅
источник

S

Sultanbek in Django [ru] #STAY HOME
Но это не так важно
источник

S

Sultanbek in Django [ru] #STAY HOME
Saydi
Model.objects.filter(last_name=form.cleaned_data['last_name'], phone...).delete()
Но получается любой человек знающий телефон и фамилию может удалить?
Спасибо большое 🙏
источник

S

Sultanbek in Django [ru] #STAY HOME
Это гениально😭
источник

O

Olex in Django [ru] #STAY HOME
Artem Gubatenko
а если цепочкой выстроить фильтры, то будет правильно собирать запрос?
Помню, у меня как-то не хотел применяться второй подряд .filter(). Вот просто не было условия в запросе.

Если работает, то можно:
1. присвоить базовый запрос в переменную
2. сделать if, под который убрать добавление нового условия
3. И так для всех условий

Но это если не нужены условия с None
Ну я вообще только одну идею придумал. При каждом юзе obj.manytomanyfiels.all() приходит запрос. Можно просто в переменную фигануть и она закешируется. Но только 3 запроса уменьшит. Я уверен что если сложный sql написать то все пойдёт но такое я не смогу сделать.
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
Народ привет, кто-то знает как это оптимизировать? А то я голову ламаю.
кстати: я бы сразу в if получал .values() (синтаксис питона 3.8) а потом добавлял в условие.
Так конструкция получится "легковестнее", чем с .all()
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
Ну я вообще только одну идею придумал. При каждом юзе obj.manytomanyfiels.all() приходит запрос. Можно просто в переменную фигануть и она закешируется. Но только 3 запроса уменьшит. Я уверен что если сложный sql написать то все пойдёт но такое я не смогу сделать.
эти запросы убираются предварительным prefetch_related(). Доп запросов будет по числу м2м полей
источник

J

Jack in Django [ru] #STAY HOME
cart.len() ребят вызывание "приватного" метода показывает то что код не очень компитентен, или ничего такого?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
Ну я вообще только одну идею придумал. При каждом юзе obj.manytomanyfiels.all() приходит запрос. Можно просто в переменную фигануть и она закешируется. Но только 3 запроса уменьшит. Я уверен что если сложный sql написать то все пойдёт но такое я не смогу сделать.
это у тебя, похоже, в классе админки?
"управление" queryset'ом происходит в get_queryset() методе)
источник

O

Olex in Django [ru] #STAY HOME
Artem Gubatenko
эти запросы убираются предварительным prefetch_related(). Доп запросов будет по числу м2м полей
То-есть по сути мне prefetch изначальный кверисет и дальше уже фильтры подрубать?
источник

O

Olex in Django [ru] #STAY HOME
Artem Gubatenko
это у тебя, похоже, в классе админки?
"управление" queryset'ом происходит в get_queryset() методе)
Нет не класс админки. Это хуйня какая-то. Я сам не поняо
источник

O

Olex in Django [ru] #STAY HOME
Первый день на проекте и сразу так дали
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
То-есть по сути мне prefetch изначальный кверисет и дальше уже фильтры подрубать?
из твоего сообщения мне кажется, что ты не понимаешь как prefetch_related() используется?
источник

O

Olex in Django [ru] #STAY HOME
Artem Gubatenko
из твоего сообщения мне кажется, что ты не понимаешь как prefetch_related() используется?
Ну это для джоинов по сути.
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Jack
cart.len() ребят вызывание "приватного" метода показывает то что код не очень компитентен, или ничего такого?
юзай len(cart), а не этот "магический" метод
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Jack
cart.len() ребят вызывание "приватного" метода показывает то что код не очень компитентен, или ничего такого?
Cart - queryset?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Olex
Ну это для джоинов по сути.
для джоинов - select_related()
а prefetch_... для предзагрузки данных по связям O2M | M2M
*UPD
источник

O

Olex in Django [ru] #STAY HOME
Artem Gubatenko
для джоинов - select_related()
а prefetch_... для предзагрузки данных по связям O2M | M2M
*UPD
Ага понял тогда почитаю о нем чтобы оптимизировать. Спасибо.
источник