Посты с тэгом widgets


Простой и работающий JSONField для Django

Не успел, я починить PickleField для Django, мне понадобилось создать JSONField. Задача оказалась решенной на раз/два, плюс ко всему добавился маленький и полезный виджет для JSONField'а, который показывает красиво отформатированный JSON в textarea. Сразу скажу, что contribute_to_class метод чуть менне, чем полностью, скопипастен с снипетта 377.

from django.conf import settings
from django.forms.widgets import Textarea
from django.db.models import SubfieldBase, TextField
from django.utils import simplejson


class JSONField(TextField):
    __metaclass__ = SubfieldBase

    def contribute_to_class(self, cls, name):
        super(JSONField, self).contribute_to_class(cls, name)

        def get_json(model):
            return self.get_db_prep_value(getattr(model, self.attname))
 


jQuery AutocompleteWidget для Django

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

Так что будем считать, что сегодня просто сама по себе настала очередь связки jQuery + Django. Реализация виджета автозаполнения в этой связке - проста до ужаса. Особенно, когда используется великолепный jQuery Autocomplete plugin.

Вся идея реализации состоит в следующем:

  1. Определяем какие данные будут использоваться в автозаполнении (локальные или удаленные)
  2. Если данные удаленные, пишем view и добавляем этот view в urlpatterns
  3. Получаем автозаполняемое поле

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



Расширение виджета для выбора даты в Django

В предыдущем посте я упомянул о виджете для выбора даты в Django. И все вроде бы хорошо, но этот виджет становится совершенно бесполезным, когда надо:

  • выбрать месяц день и год в другом порядке (например, в привычном день-месяц-год);
  • использовать трехбуквенные сокращения месяца, а не полное название
  • не выбирать день (например, май 2008)
  • не выбирать ни день, ни месяц (например, 2008 год)
  • добавить первым пустой <option>

И потому для этих случаев я смастерил очередной велосипед свой виджет, который устраняет все эти недостатки. Посмотреть как он работает можно здесь (поля Дата рождения, Год поступления, Год окончания, Период работы с, по).

Уже интересно?

Тогда получайте сам виджет:

import datetime, re
from time import strptime

from django.newform