Объекты, которые нуждаются в descructors и располагают методы, используют неуправляемые ресурсы. Таким образом, сборщик "мусора" не может очистить те ресурсы, и необходимо сделать это самостоятельно.
Взгляд на документацию MSDN для IDisposable; http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
пример использует неуправляемый обработчик - IntPr.
Конечно, я не джедай django / python, но ...
Я не думаю, что в вашем подходе что-то не так. Это чистое чтение.
Возможно, вам не потребуется создавать собственный виджет только для отображения даты в правильном формате при первом отображении формы. Просто используйте параметр format
для виджета DateInput
, и все будет в порядке. Итак, в вашем классе MyDateField я бы просто сделал:
class MyDateField(forms.DateField):
widget = forms.DateInput(format="%d/%m/%Y")
def __init__(self, *args, **kwargs):
super(MyDateField, self).__init__(*args, **kwargs)
self.input_formats = ("%d/%m/%Y",)+(self.input_formats)
Вы можете использовать formfield_callback
(см. принятый ответ для этого отдаленно связанного вопроса), что означает:
def customize_fields(f):
if isinstance(f, DateTimeField):
datetime_field=forms.DateTimeField(widget=
forms.DateInput(format='%d/%m/%Y %h:%i'))
date_field.input_formats = ("%d/%m/%Y %h:%i",)+
(date_field.input_formats)
return datetime_field
elif isinstance(f, DateField):
date_field=forms.DateField(widget=
forms.DateInput(format='%d/%m/%Y'))
date_field.input_formats = ("%d/%m/%Y",)+
(date_field.input_formats)
return date_field
else:
return f.formfield()
class MyModelForm(forms.ModelForm):
formfield_callback = customize_fields
class Meta:
model = ...
Это полностью исключает потребность в вашем классе MyDateField
, но может ввести - если вы хотите, чтобы каждый отдельный класс формы вызывал customize_fields
- потребность в потомке ModelForm, реализация formfield_callback = customize_fields
в качестве новой основы для всех ваших классов форм.
Моя проблема с использованием механизма formfield_callback
двойная:
Он менее читабелен и полагается в знании внутренней работы ModelForms. Я нигде не могу найти актуальную документацию по formfield_callback ...
Если вам когда-нибудь понадобится переопределить поле модели в ModelForm, скажем, чтобы сделать поле необязательным для этого конкретного экземпляра формы, например:
класс MyModelForm (forms.ModelForm):
formfield_callback = customize_fields
foo = forms.DateField (обязательно = false)
класс Meta:
model = Бар
вы перезаписываете поле формы, возвращаемое функцией customize_fields, следовательно, полностью теряете настройку.
Я думаю, что ваш подход более читабелен.