Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 26, 2008 00:41:56

OZION
От:
Зарегистрирован: 2008-10-15
Сообщения: 89
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

все в своей кривости разобрался forms.DateField('%m/%d/%Y') вот так делать нельзя =)
надо вот так: forms.DateField(input_formats=('%d-%m-%Y',)

очень понравилось данное решение http://djangonaut.blogspot.com/2008/05/django_08.html
изменил код виджета в файле Python25\Lib\site-packages\django\forms\extras\widgets.py на код из статьи
далее по примеру автора статьи модифицировал свой:

 passport_when_delivery = forms.DateField(label='Дата выдачи', initial=datetime.date.today,
input_formats=('%d-%m-%Y',),
widget=SelectDateWidget(input_format='%d-%B-%Y', years=range(year, year-101, -1)))
но система не нашла виджет и выдала ошибку name ‘SelectDateWidget’ is not defined

Офлайн

#2 Дек. 26, 2008 07:43:00

Vermus
От:
Зарегистрирован: 2008-11-18
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

OZION
все в своей кривости разобрался forms.DateField('%m/%d/%Y') вот так делать нельзя =)
надо вот так: forms.DateField(input_formats=('%d-%m-%Y',)
Ну да, выше я приводил рабочий пример, это input_formats должен быть списком.

OZION
очень понравилось данное решение http://djangonaut.blogspot.com/2008/05/django_08.html
изменил код виджета в файле Python25\Lib\site-packages\django\forms\extras\widgets.py на код из статьи
далее по примеру автора статьи модифицировал свой:
 passport_when_delivery = forms.DateField(label='Дата выдачи', initial=datetime.date.today,
input_formats=('%d-%m-%Y',),
widget=SelectDateWidget(input_format='%d-%B-%Y', years=range(year, year-101, -1)))
но система не нашла виджет и выдала ошибку name ‘SelectDateWidget’ is not defined
Зря модифицируешь исходники, лучше создай свой фал widgets.py и подключай свои виджеты через него.
Не нашла - значит подключен неправильно. в вашем случае должно быть forms.SelectDateWidget, если вы объявили:
from django import forms



Офлайн

#3 Дек. 26, 2008 12:25:10

OZION
От:
Зарегистрирован: 2008-10-15
Сообщения: 89
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

лучше создай свой фал widgets.py и подключай свои виджеты через него
Сделал так, все заработало(почти все)

так все работает
	passport_when_delivery = forms.DateField(label='Дата выдачи', initial=datetime.date.today,
input_formats=('%d-%m-%Y',),
widget=SelectDateWidget(input_format='%d-%B-%Y')
при этом years по умолчанию и согласно виджету
        years            - list/tuple of years to use in the "year" select 
box. By default: this year and next 9 printed.
формирует года от текущего до следующих 9ти.

поскольку данное решение не подходит согласно примеру автора виджета добавил параметр years
	
from django import forms
import datetime
from prokat.widgets import SelectDateWidget
class Form_Order(forms.Form):
passport_when_delivery = forms.DateField(label='Дата выдачи', initial=datetime.date.today,
input_formats=('%d-%m-%Y',),
widget=SelectDateWidget(input_format='%d-%B-%Y', years=range(year, year-101, -1)))
при таком раскладе система не находит year в range “Exception Value: name ‘year’ is not defined”
В чем может быть дело?

П.С код моего виджета абсолютно идентичен коду автора виджета http://djangonaut.blogspot.com/2008/05/django_08.html
Разве что заменил
from django.newforms.widgets import Widget, Select
на
from django.forms.widgets import Widget, Select
версия джанго VERSION = (1, 0, ‘final’)

Отредактировано (Дек. 26, 2008 12:32:26)

Офлайн

#4 Дек. 29, 2008 07:41:57

Vermus
От:
Зарегистрирован: 2008-11-18
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

Ну так все по-русски написано Exception Value: name ‘year’ is not defined"
Определи год как-нибудь (в примере это текущий год - то есть задаем диапазон в зависимости от текущего года), например,

now = datetime.datetime.now()
year=now.year



Офлайн

#5 Авг. 11, 2009 20:14:23

gfw
От:
Зарегистрирован: 2009-07-07
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

Vermus
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(MyModelAdmin,self).formfield_for_dbfield(db_field,**kwargs)

if isinstance(db_field, models.DateField)
return forms.DateField(input_formats=('%d-%m',), widget=SelectDateWidget(input_format='%d-%B', null=True))
return field
или
Сделал все точно как в этом примере. Вид поля в админке изменился, но при нажатии кнопки “сохранить” теперь непрерывно вылазит ошибка “Укажите дату правильно”. Второй день никак не могу понять, что и как исправить. Помогите!!!!



Офлайн

#6 Ноя. 14, 2009 22:32:23

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

Всем привет,
подскажите как определить формат даты не в админке а в форме ? У меня код

class BookForm(ModelForm):    
publication_date = forms.DateField(input_formats=('%d-%m-%Y',), \
widget=SelectDateWidget(input_format='%d-%B-%Y',\
years=range(year, year-101, -1)))
class Meta:
model = Book
Получаю
__init__() got an unexpected keyword argument 'input_format'
виджет SelectDateWidget() не желает работать с input_format (также пробовал input_formats)!!! Или я что то делаю не правильно?



Отредактировано (Ноя. 15, 2009 19:14:00)

Офлайн

#7 Ноя. 15, 2009 11:12:49

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

формат models.DateField

qman
виджет SelectDateWidget() не желает работать с input_format!!!
Да. Не надо ему его скармливать.



Офлайн

#8 Ноя. 15, 2009 21:13:42

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

Daevaorn
Да. Не надо ему его скармливать.
извините за тупость при таком коде
class BookForm(ModelForm):    
publication_date = forms.DateField(input_formats=('%d-%B-%Y',), )
class Meta:
model = Book
имею формат даты:
год-месяц-день
а нужно
день-месяц-год.
Где туплю?



Офлайн

#9 Ноя. 15, 2009 21:21:09

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

формат models.DateField

оказалось, что форма ввода новых объектов воспринимает формат как задано в input_formats! а при редактировании уже введенных записей input_formats игнорируется.

class BookForm(ModelForm):    
publication_date = forms.DateField(input_formats=('%d/%m/%Y',),)

class Meta:
model = Book
Я один с такой проблемой?



Отредактировано (Ноя. 16, 2009 09:34:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version