デフォルトでは、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のドキュメントへのリンクは次のとおりです。%p
a.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(...)
ますか?