Categories

Checkio.ORG

Subscribe to Posts

Email:

  • 27Apr

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

    В Джанго есть MultiWidget, при инициализации которого можно указывать массив виджетов, которые будут принадлежать одному полю и выведены в ряд. При этом значение, возвращаемое этим виджетом – очевидно будет массив.

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

    Ниже пример поля с датой из 3х выпадающих списков:

    1. from datetime import date
    2.  
    3. from django import forms
    4. from django.utils.translation import ugettext_lazy as _
    5.  
    6. class ListMultiWidget(forms.MultiWidget):
    7.     def decompress(self,values):
    8.         if values:
    9.             return values
    10.         return [None]*(len(self.widgets))
    11.  
    12. YEARS_CHOICES = map(lambda a: (a,a), range(1950,2011))
    13. MONTH_CHOICES = map(lambda a: (a,a), range(1,13))
    14. DAY_CHOICES = map(lambda a: (a,a), range(1,32))
    15.  
    16. SplitDates = ListMultiWidget((forms.Select(choices=YEARS_CHOICES),
    17.                                 forms.Select(choices =MONTH_CHOICES),
    18.                                 forms.Select(choices =DAY_CHOICES )))
    19.  
    20. class SplitDatesField(forms.Field):
    21.     widget = SplitDates
    22.     def to_python(self,value):
    23.         try:
    24.             return date(int(value[0]),int(value[1]),int(value[2]))
    25.         except ValueError:
    26.             raise forms.ValidationError(_(u'Wrong Date'))
    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , ,

   

Recent Posts

Recent Comments

  • Благодарю, начал изучать fabric с вашей статьи....
  • Идея действительно отличная и очень радует то, что подобн...
  • Спасибо...
  • Там четыре круглых кнопочки. Подразумевается, что каждая ...
  • А в чем заключатеся неправильна работа?...