August 16th, 2009

404

django

За вот эту конструкцию:

if form.is_valid():
    form.save()

я им готов простить что угодно.


Ворчливо:

но питон редкостная зануда и цепляется к каждому (пропущенному) двоеточию.
404

высокое разрешение

Первое, что следовало бы сделать на мониторах с нормальным DPI (>300) - это добавить в редакторы автоподчёркивание выражения. Скобки - добавить линию. Ещё скобки - ещё одну линию.

В современных редакторах (мониторах) это чревато: выражение с 3-4 вложенными скобками уже будет не очень выглядеть.
404

django - редактирование с помощью форм

Со скрипом нашёл как (одна бумажная книга + djangobook v1 и v2 об этом ни слова).

Суть задачи: дать возможность пользователю редактировать уже существующую запись с помощью формы. Задача делится на 2:

1) Заполнить поля формы данными из базы.
2) Каким-то образом дополнить форму перед записью в БД данными, которые были в форме, но которые не были показаны пользователю (т.е. которых нет в POST).

В документации кое-что было, вот как это (вроде бы) надо делать (item - фильтруется в urlconf'е, фактически, это ID редактируемой записи):

(N.B. никаких проверок тут пока нет!)

def edit_view(request,item=0):
    if request.POST:
        before_edit=Project.objects.filter(id=item)[0]
        form=ProjectEditForm(request.POST,instance=before_edit)
        if form.is_valid():
            project=form.save()               
            return HttpResponseRedirect(project.get_absolute_url())
        else:
            return render_to_response('tracking/project_edit.html', {'form': form})
    if item:
        form=ProjectEditForm(instance=Project.objects.filter(id=item)[0])
    else:
        form=ProjectEditForm()
    return render_to_response('tracking/project_edit.html', {'form': form})
404

Маленький принц

Я внезапно вспомнил, что в детстве (реальном детстве, кажется, 5-) у отца был плеер пластинок. И сколько-то детских пластинок. Ну, тот самый старушечий голос с русскими сказками, ОСТ Врунгеля и т.д.

Среди них был "Маленький принц". Разумеется, я нашёл ту запись, послушал. Сейчас меня, пресыщенного до невозможности всяким артхаусом разной степени попсовости, кашааном, бакемоногатари, гиассом, Евой, Кино но таби, Бибопом, Фафнером, Хаусом и т.д. оно ни на йоту не тронуло.

Но я вспомнил то впечатление, которое на меня произвела пластинка тогда. Это было что-то невероятное. Сам маленький принц понятен только взрослым, разумеется. Но сцена с змеёй, с расставанием принца и Лиса - настроение в этот момент я воспринял в полном объёме. И без какой-либо замыленности, свежайшим взором... Т.е. слухом.

Если бы я сейчас смог подобрать слова, которыми описать это впечатление, то я был бы именитым писателем.

Скажу лишь некоторые фрагменты ощущения: каждое слово тяжело, за каждым словом Смысл. (Разительное отличие от "не садись на пенёк, не ешь пирожок"). Герои говорят о чём-то одновременно невероятно сложном - и в то же самое время о понятном. (В те замечательные годы по советскому телевидению показывали много сложного и непонятного, фильтровать его я уже (вроде бы) научился). Это было понятно - но смысл, открывающийся за понятным был чем-то необъятным, запредельным.

В то время я не знал, что такое пшеница, что она может колыхаться, я плохо представлял себе змей, как выглядят растущие розы я тоже не знал. Но почему-то понял.

Особенно объяснение лиса про грусть. Это сейчас я пишу "грусть" и это такой отдалённый синоним "хандра", а тогда я полностью проникся величием спокойной драмы. Даже не драмы - за словами Лиса, за словами Принца было что-то, что иначе, как "катарсис" не назовёшь. Чужой мир, невероятно другой по сравнению с всем тем, что я знал раньше. (глупо сравнивать, но что-то подобное я ощутил, когда впервые залез на подъёмный кран и посмотрел вниз сквозь сплетение железных балок).

А ещё, я первый раз услышал декаданс... Ведь Принц, идущий на встречу с Змеёй - это и есть настоящий декаданс....
404

django

Всё-таки оно - радость. Особенно в тот момент, когда обнаруживается, например, что {{form.field_name.errors}} есть и им можно красиво пользоваться.

Им реально надо иметь несколько красивых виджетов для отображения форм (чтобы не надо было расковыривать admin), шоткат EditTable (гибрид Model, FormModel и какого-никакого шаблона по-дефолту) - и совершенство достигнуто.

Главное, что мне нравится в django - это понятная, ясная модель происходящего на сервере.

Главное, что меня смущает - я его пока ни разу под апачем не завёл (не пробовал). :-\ Список граблей going on...
404

Внезапно: classes everywere

Если мы пишем printf ("%s",q), то не дай бог, q окажется не строкой...

Если мы пишем на питоне

f.write("%s"%([2,4],{"4":lambda a:a.list()},"test",(3,4,5,6)), то... разумеется, будет вызван встроенный метод [].__str__(), который всё это съест и не подавится.

Другими словами, %s в питоновской подставлялке, это не вывод _строк_, а вывод объектов в строковом виде.

В качестве бонуса - в любом месте для %s можно написать dir(что-то). Или type(что-то). Очень приятно для отладки...
404

django hacking

Пишу сравнивалку django'вских классов. (у которых есть _meta). Пока споткнулся о то, что у обычных атрибутов и ForeignKey разное отношение к obj.__dict__["key_name"]. Обычные отдают значение, ForeignKey (и, вероятнее всего, Many2Many) - нет. Думаю, как бы этот вопрос решить.

Суть простая: нужно сказать, были ли поменяны поля в форме после редактирования. При этом я хочу знать имена полей. Желательно, в цикле, а не с поштучным сравнением.

... кажется, я понял ошибку. Я сравниваю экземпляры классов модели. А надо сравнивать экземпляры классов форм. Это проще, там не должно быть пугающего ForeignKey, там всё должно иметь простую символьную форму, пригодную для показа в хытымыэле.
404

(no subject)

всего-то поковырялся чуток с объектной моделью django - и уже пол-седьмого ночи.