Создание форм Django. Шоу DateField использует локальный формат даты

Объекты, которые нуждаются в descructors и располагают методы, используют неуправляемые ресурсы. Таким образом, сборщик "мусора" не может очистить те ресурсы, и необходимо сделать это самостоятельно.

Взгляд на документацию MSDN для IDisposable; http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

пример использует неуправляемый обработчик - IntPr.

7
задан olivergeorge 21 September 2009 в 08:26
поделиться

1 ответ

Конечно, я не джедай 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 двойная:

  1. Он менее читабелен и полагается в знании внутренней работы ModelForms. Я нигде не могу найти актуальную документацию по formfield_callback ...

  2. Если вам когда-нибудь понадобится переопределить поле модели в ModelForm, скажем, чтобы сделать поле необязательным для этого конкретного экземпляра формы, например:

      класс MyModelForm (forms.ModelForm):
     formfield_callback = customize_fields
     foo = forms.DateField (обязательно = false)
    
     класс Meta:
     model = Бар
    

    вы перезаписываете поле формы, возвращаемое функцией customize_fields, следовательно, полностью теряете настройку.

Я думаю, что ваш подход более читабелен.

10
ответ дан 6 December 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: