Как стать автором
Обновить

Комментарии 35

Я вот сильно жду newforms-admin и надеюсь что тогда можно будет спокойно в админку добавлять свои кастомные элементы форм.
А я уже давно использую newforms-admin.
SVN: http://code.djangoproject.com/svn/django/branches/newforms-admin
Скоро запускаю рискованный проект на этой ветке :-)

FAQ от Llama, который знает newforms-admin очень хорошо: http://code.djangoproject.com/wiki/NewformsHOWTO
Так же вы можете его найти на официальном irc-канале #django в сети FreeNode :)
О, спасибо.

С тех пор как я смотел newforms-admin в последний раз, дело продвинулось :)
Они довольно часто коммитят в этот бранч...
Они называют oldforms и oldforms-admin «horrible» :)
Могли бы написать по поводу этой штуке топик. Я, например, об этой ветке первый раз слышу.
Очепяточка: штуки :D
Спасибо. Только ошибки/опечатки поправьте, пожалуйста.
да, в слове «млять» с ошибка
Такое впечатление, что документацию к Django newforms автор не читал.

> class SelectFromModel(forms.Field):
Круто написал, все ок. Только есть ChoiceField.

> class TagField(forms.CharField):
Подобный clean - это уровень приложения, а никак не формы.
Не нравится что наследую от Field? Это только для гибкости, не более. Потому как от подобного (select) ввода собираюсь отказаться. Но по сути, я его и реализовал (и помню, даже пробовал ChoiceField).

На счёт TagField, сложный вопрос. Мне понадобится ещё как минимум 10 таких полей на весь сайт впихнуть. Всёравно придётся выносить код в отдельный метод, а в поле он как-то в тему получается.
1. Никакой гибкостью в отличии от использования того же ChoiceField там, на самом деле, и не пахнет. ;)

2. Ну, куда писать код - это тебе решать. Но для начала советую все же перечитать доку джанговскую. А насчет clean - "Each Field in a Form class is responsible not only for validating data, but also for “cleaning” it — normalizing it to a consistent format".
Т.е. clean - это НЕ обработчик значения поля, этим в джанге view'ы занимаются. Так что советую задуматься.
1. Ну мб :) Почему-то решил не завязываться на Choice, вот хз почему)

2. Как раз для normalizing it to a consistent format и делаю clean. Т.е. строка -> Набор значений. Опять же, в Django есть поле выполняющее подобную функцию, если мне не изменяет память

P.S> Вообще, я это делал достаточно давно и причины, по которым я сделал некоторые вещи, не совсем помню.
Я не уверен, но мб претензии к тому, что я зря вообще писал загрузку данных и это всё уже есть в ChoiceField? Я рыл сырцы, но ничего не нашёл.
Там только о доп. параметре. Как туда можно забить значения на автомате? Т.е. чтоб было проще чем выше (учитывая что мне нужно будет ещё как минимум 10 полей для city, metrostation (кстати, ещё к этому полю есть виджет) и ещё немного раз category.
2. Угу, и добавление в таблицу - тоже нормализация? :)
Да.Один хрен их добавлять придётся. DRY, бля
try:
dbtag = Tag.objects.get(title=tag)
except:
dbtag = Tag(title=tag)
dbtag.save()

Написать эти 4 строки несколько раз - это лучше, чем перековеркивать смысл работы приложения. ;)

PS. А вообще - можно в функцию это оформить.
Ничем не лучше функции, пусть уж логика привязанная к конкретному полю будет в самом поле.

И считаю, для простоты дальнейшей работы приемлемо коверкать смысл :)
Эх...
Учишь вас, учишь. А потом сидишь и материшься, когда приходится код дописывать. :(

1. Читай про MVC
2. Форма не должна менять модель, понятно почему? :)
3. Твой пример пишется в одну строку, так что ни в какую функцию его выносить не нужно:
Tag.objects.get_or_create(title=tag)
1. Читал, видел, делал
2. Не соглашусь! Вот виджет, да, это View, а Field это контроллер всяко разно!
3. Да, это я знаю. Старая привычка делать через исключения :) Сейчас уже исправляюсь. Но всё же функциональность не только в добавлении тега (тем более одного) в БД, там ещё разделение тегов, например.
"django.newforms is intended to handle HTML form display, data processing (validation) and redisplay."

Заметь - "validation". В твоем случае, validation - это разбить на теги, т.е:
def clean(self, value):
return [tag.strip().lower() for tag in value.split(',')]
Признаюсь, я очень упёртый человек па жизни :D
def clean(self, value):
return [Tag.objects.get_or_create(
title=tag.strip().lower() )for tag in value.split(',')]
Это не нормализация. :)
3 Поправил и + в карму. :) Пусть всёже, кому надо учатся правильно делать.
:))
А еще можно написать вот так :)
newTag, created = Tag.objects.get_or_create(title=tag)
Если есть такой тэг, newTag будет ссылкой на него, а created — False.
Если нет, то такой тэг создастся, newTag будет ссылкой на него, а created — True.

Уже одна строка :)
Уже и так метод в одну строку записали :)
Да, просмотрел. Но, думаю, не беда, что описал как оно работает. А вернее, что возвращает :)
А почему для тэгов не воспользоваться готовым http://code.google.com/p/django-tagging/…
И по поводу категории я не понял, почему не воспользоваться models.ForeignKey ? Там же уже реализован и Select и валидация.
Про теги написал, чтоб объяснить строчку кода. Ещё сам не знаю как это будет выглядеть.

При чём тут models.ForeignKey?
Извиняюсь, притормозил. Перепутал model и newform )
Но за сцылку всёравно спс
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории