
Владимир
29.09.2016
16:51:24
тонкие контроллеры - толстые модели
вьюху можно считать контроллером

Roman
29.09.2016
16:52:07
спс

arisu
29.09.2016
16:58:05

Google

Marsel
29.09.2016
17:12:16
кстати от / можно избавиться если cls.objects.filter написать на одном уровне. дальше всё-равно открываются скобки у тебя. читаться будет лучше (имхо)

Roman
29.09.2016
17:27:53
Хотел разделить filter и exclude просто
Я бы в менеджер определил
Спасибо, а то некоторые классы затрагивают несколько моделей, которые, по сути, описываю один объект

Bulatbulat48
29.09.2016
17:33:15
A view is a place where we put the "logic" of our application
Из мануала джангогирлс

V
30.09.2016
08:31:13
подскажите, плз, как правильно делать кнопку "отмены" в форме подтверждения (допустим, удаления объекта) для пользователя? и делать ли ее вообще?

Art
30.09.2016
08:31:43
Ссылку на страницу назад

V
30.09.2016
08:31:54
т.е. форма типа <form action="{% url 'comparator:delete_case' comparecase.id %}" method="post"> блаблабла уверены ли вы

Art
30.09.2016
08:32:07
Посмотри как в админке сделано при удалении

V
30.09.2016
08:32:21
внизу <input type="submit" value="Confirm">
а кнопка отмены input'ом?

Google

Art
30.09.2016
08:33:14
Вроде просто a, хотя могу ошибаться.

V
30.09.2016
08:33:33
а если просто а, то она же будет не как кнопка, а как ссылка
некрасиво

Art
30.09.2016
08:33:40
Возможно онклик в button

V
30.09.2016
08:34:02
во, я так и хотел сначала сделать, но засомневался

Art
30.09.2016
08:34:04
Да вроде там онклик был

V
30.09.2016
08:34:27
а вообще ее принято делать? в принципе юзер сам может назад нажать в браузере
если передумал удалять например

Art
30.09.2016
08:34:47
И жс на страницу назад.
Лучше явно, а то за сомневается и вообще закроет страницу.
А потом будет мучиться и проходить всю иерархию заново.

V
30.09.2016
08:38:04
да, согласен, сделаю через онклик, спасибо

arisu
30.09.2016
08:45:51
можно воткнуть дополнительный параметр типа _confirm=true
в форму
при запросе на /delete/ проверять наличие, без него возвращать форму конфирма, а с ним удалять

Artem
30.09.2016
08:46:44
блин, как всетаки весело клепать шаблончики
какого-же это всетаки погрязнуть в API'шках
одни JSON, да XML
шедуллеры

arisu
30.09.2016
08:48:22
здорово же

Google

arisu
30.09.2016
08:48:29
верстка - это вторично
я забыл как называется чувство очень сильного удовлетворения

Artem
30.09.2016
08:49:43
эйфория

arisu
30.09.2016
08:50:11
во
эйфория - это когда потреление рамы проектом снес с 16 гигабайт до 100 МБ
вот это здорово
?
и ничего не поломалось

Artem
30.09.2016
08:54:55
О_о ты там чего крутил?

arisu
30.09.2016
08:58:44
резал одну большую транзакцию

V
30.09.2016
12:41:15
подкажите, плз. имею конструкцию вида last_unit = CompareUnit.objects.filter(case_id__exact=case.id).reverse()[:1] в надежде получить из нее некий "последний юнит", принадлежащий определенному "кейсу". затем мне нужно взять у этого последнего юнита свойство "position", т.е. last_unit.position. но может так оказаться, что в кейсе нет ни одного юнита и вывалится AttributeError. как правильно делать проверку в таком случае?
я сначала хотел сделать if last_unit: но ведь фильтр вернет QuerySet в любом случае, как я понимаю

parikLS
30.09.2016
12:44:16
можешь сделать проверку на каунт например filter(...).count() > 0

V
30.09.2016
12:45:41
да, можно. а так обычно делают или есть более элегантный способ? а то какое-то выражение уж больно многослойное получается
ну т.е. я выходит должен сделать проверку if last_unit.count== 1 но как-то коряво это смотрится
типа убедиться, что фильтр вернул мне в QuerySet значение, и оно всего одно...

Тимур
30.09.2016
12:49:03
а в чем задача вообще? убедиться что есть хоть одно значение в таблице? много ли там записей сейчас и в будущем ?

V
30.09.2016
12:52:36
ну у каждого кейса есть юниты. у каждого юнита есть позиция. добавляя новый юнит в кейс я хочу чтоб он встал в конец, т.е. получил последнюю позицию. для этого мне надо проверить, есть ли у этого кейса уже юниты и если есть, взять позицию последнего из них. а если это создается самый первый юнит, то дать ему позицию 0
в базе сейчас пусто, в теории должно быть много много кейсов, но мало-мало юнитов у каждого, в среднем 3-5

parikLS
30.09.2016
13:12:16
можно еще так попробовать получить последний юнит

Google

kiwwwi
30.09.2016
13:12:58
Если я правильно понял задачу, то можно сообразить что-то типа этого:
position = 0
if case.units.all()
position = case.units.last().position
Unit.objects.create(position=position, case=case)

parikLS
30.09.2016
13:13:32
Unit.objects.get(case=case, pk=Unit.objects.aggregate(Max("pk"))["pk__max"])
и обрабатывать уже Unit.DoesNotExist ексепшн
а если все ок - вернет последний созданный юнит

kiwwwi
30.09.2016
13:15:09
Если цель вернуть именно последний созданный юнит то отлично подойдет Unit.objects.last()

V
30.09.2016
14:33:53

Artem
30.09.2016
14:35:38
и он запилит нормальный запрос с аггрегациоными функциями без повторного селекта
так же и по лукапам можно пробежаться

V
30.09.2016
14:36:32
а то у меня тут еще сомнения возникли, по какому полю он будет их сортировать в фильтре. я вроде читал, что это где-то задается, но забыл как

Artem
30.09.2016
14:40:06
как задашь, так и будет сортировать

V
30.09.2016
14:40:20
а вот я забыл где задается поле для сортировки

Artem
30.09.2016
14:40:21
там можно много изящных запросиков замутить
order_by() и передаешь арги по каким полям сортировать

V
30.09.2016
14:41:19
а разве нет возможности задать поле для сортировки по умолчанию?

kiwwwi
30.09.2016
14:41:52
В модели можно

V
30.09.2016
14:42:08
вот и мне так казалось. а напомните параметр плз

kiwwwi
30.09.2016
14:43:43
https://docs.djangoproject.com/en/1.10/ref/models/options/#ordering

V
30.09.2016
14:45:20
а, да, спасибо

Google

V
30.09.2016
14:49:27
что-то я делаю не так. с annotate() выдает name 'pk_max' is not defined

Vladimir
30.09.2016
14:57:27
F('pk_max') но мне кажется всё равно не будет работать

V
30.09.2016
15:29:52
в итоге вот так сделал:
last_unit = CompareUnit.objects.filter(case=case).aggregate(Max('position'))['position__max']
new_unit_position = 0 if last_unit is None else last_unit+1
надеюсь не очень по-индийски получилось

arisu
30.09.2016
16:13:21

V
30.09.2016
16:29:33
.last()
уже было, но нет. я фундаментально спутал понятия "последний элемент" и "элемент с наибольшим значением в поле... "
выше написал, как решил, работает

arisu
30.09.2016
16:50:33
Ааа.
Ок
Но все равно не пренебрегайте экзистом и ластом
Они генерируют разные запросы
Разные, чем каунт
И слайс
Вроде как
Да и более осмысленно выглядят

V
01.10.2016
10:01:46
подскажите, плз, по базовой концепции, в ту ли сторону копаю. есть некая основная модель и пара других моделей, которые с ней связаны через ForeignKey. в views есть CBV для основной модели, наследует от generic.DetailView. если я хочу в шаблоне для этой вьюхи показывать все связанные с основной моделью другие модели (объекты), мне надо переопределять get_context_data? в принципе работает, но не уверен, хорошая ли это практика

Alexander
01.10.2016
10:13:13
Нет, не надо. Если не ошибаюсь, вам нужно это https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ForeignKey.related_name

V
01.10.2016
10:39:02
хм, да, похоже! спасибо, сейчас попробую переделать

Vlad
01.10.2016
10:40:33
Может кто подсказать надо после сохранения файла распарсить его. как это лучше сделать? Сейчас вьюшка на CreateView сделана