1

SplitDateTimeWidgetref docへのリンク)にAM /PM入力を認識させる方法を一生理解できません。

テンプレートスタイルの入力の両方を試しました。

widgets={'start_datetime':forms.SplitDateTimeWidget(time_format='h:i A')}

および標準のPython時間入力(ここで提案):

widgets={'start_datetime':forms.SplitDateTimeWidget(time_format='%I:%M %p')}

ご想像のとおり、私のモデルにstart_datetimeは次のようなものがあります。DateTimeField

start_datetime=models.DateTimeField('Start', default=datetime.now())

私がこれを検証に合格させるものは何もないようです-私はそのフィールドでエラーを受け取り続けます。助言がありますか?私は今2時間探していましたが無駄になりました。24時間制を使用するか、AM / PM部分を省略するかを検証することはできますが、AM/PMを正しく解釈できるようにしたいと思います。

ありがとう

4

2 に答える 2

1

あなたはただオーバーライドすることができますdjango.contrib.admin.widgets.AdminSplitDateTime

これはコードです:

class CustomAdminSplitDateTime(AdminSplitDateTime):
def __init__(self, attrs=None):
    widgets = [AdminDateWidget, AdminTimeWidget(attrs=None, format='%I:%M %p')]
    forms.MultiWidget.__init__(self, widgets, attrs)

これで、次のように使用できます。

class MyForm(forms.ModelForm):

  class Meta:
    model=MyModel
    exclude=()
    start_datetime= forms.DateField(
        widget=CustomAdminSplitDateTime()
    )
    end_datetime= forms.DateField(
        widget=CustomAdminSplitDateTime()
    )

設定ファイルでサポートされている形式に時間形式を追加することを忘れないでください。例:

TIME_INPUT_FORMATS = [
    '%I:%M %p',
    '%H:%M:%S',
    '%H:%M:%S.%f',
    '%H:%M'
]
于 2016-03-26T15:59:45.493 に答える
0

最終的に、のソースを何度も調べた後、ウィジェットSplitDateTimeWidgetに渡す方法がわかりませんでした。input_time_formatsおそらく方法はありますが(フィールドとウィジェットの共通の系統を十分に理解していないため、何らかの方法で確実に言うことができません)、それを見つけることができませんでした。

ただし、フィールドをオーバーライドしてModelFormで使用することで機能させることができましたSplitDateTimeField(モデルの元のフィールドはDateTimeタイプです)。次に、フォームフィールドとモデルフィールドが上書きされてリンクが解除されたため、を元のモデルに戻す必要がありましDateTimeSplitDateTimeField

class MyForm(forms.ModelForm):
  start_datetime=forms.SplitDateTimeField(input_time_formats=['%I:%M %p'])
  end_datetime=forms.SplitDateTimeField(input_time_formats=['%I:%M %p'])

  class Meta:
    model=MyModel
    exclude=('start_datetime','end_datetime')

  def clean(self):
    self.instance.start_datetime=self.cleaned_data.get('start_datetime')
    self.instance.end_datetime=self.cleaned_data.get('end_datetime')
于 2011-01-16T01:23:37.283 に答える