デフォルトでは、Djangoは日付/時刻をのように表示しますMay 13th, 2010, 4:01 p.m.。また、jQueryカレンダープラグインを構成して(dateFormat: "MM d, yy", timeFormat: "h:mm tt"JavaScriptソースコードを使用し、a.m.andp.m.の代わりにAM出力するように変更しましたPM)、日付/時刻を同じ形式で表示します。
ただし、フォームの検証(デフォルト)は次の形式で行われます。
DATETIME_INPUT_FORMATS = (
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
'%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
)
を追加しようとしましたが、アカウントがandで'%B %d, %Y, %I:%M %p'あるかどうかわかりません(文字の後のピリオドに注意してください)。日付/時刻形式に関するPythonのドキュメントへのリンクは次のとおりです。%pa.m.p.m.
どうやってこれをするの?Djangoのデフォルトの(醜い)日付/時刻形式をそのまま使用しますform.is_valid()か、それとも(JavaScriptまたはPythonのどちらで)チェックする前に何らかの方法で時刻を変換しますか?
@ThomasOrozcoの編集
CustomDateTimeField私は:という新しいフォームフィールドを作成しました。
class CustomDateTimeField(forms.DateTimeField):
def strptime(self, value, format):
return datetime.datetime.strptime(value.replace("a.m.", "AM").replace("p.m.", "PM"), "%B %d, %Y, %I:%M %p")
しかし、私のフォームはそれを使用ModelFormしていfieldsますclass Meta。これが私が意味することです:
def order_edit(request, pk):
order = Order.objects.get(pk=pk)
if foo:
include_fields = (
'fa_date',
'sa_date',
)
else:
include_fields = (
'sa_date',
)
class OrderDetailForm(forms.ModelForm):
class Meta:
model = Order
fields = include_fields
if request.method == 'POST':
form = OrderDetailForm(data=request.POST, instance=order)
ここでOrder.sa_date、Order.fa_dateは両方models.DateTimeFieldです。DateTimeInputそして、私はModelFormのにしか使用できないと思いますwidgets。では、どのようにフォームに使用するように指示しCustomDateTimeFieldますOrderEditFormか?次のようなフィールドを介して追加の引数を追加し__init__、手動で再定義する必要がありself.fields['fa_date'] = CustomDateTimeField(...)ますか?