@pydjango

Страница 32 из 1273
Владимир
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
Если цель вернуть именно последний созданный юнит то отлично подойдет Unit.objects.last()
сорри, отвлекли. так вот да, .last() - то, что нужно. и еще моя ошибка была в том, что я искал поле у QuerySet, а надо было из него взять еще [0]

Artem
30.09.2016
14:35:38
Unit.objects.get(case=case, pk=Unit.objects.aggregate(Max("pk"))["pk__max"])
та зачем так! Unit.objects.annotate(pk_max=Max("pk")).get(case=case, pk=pk_max)

и он запилит нормальный запрос с аггрегациоными функциями без повторного селекта

так же и по лукапам можно пробежаться

V
30.09.2016
14:36:32
та зачем так! Unit.objects.annotate(pk_max=Max("pk")).get(case=case, pk=pk_max)
кстати наверное с max - еще изящнее, выглядит очень читаемо

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

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
та зачем так! Unit.objects.annotate(pk_max=Max("pk")).get(case=case, pk=pk_max)
а зачем вообще нужен annotate? почему не просто .objects.get(case=case, pk=Max('pk'))? так нельзя?

что-то я делаю не так. с 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 надеюсь не очень по-индийски получилось

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 сделана

Страница 32 из 1273