3

DateTimeFielddjango adminでfromURLを事前入力する方法は?

あなたのモデルが:

class MyModel(models.Model):
    name = models.CharField(max_length=14)
    date = models.DateTimeField()

次に、モデルの「追加」フォームに値を事前に入力して、次のようにGETパラメーターとして追加ビューに渡すことができます。

/admin/app/mymodel/add/?name=Test

これは本当にクールな機能ですが、DateTimeFieldでこれをどのように実現しますか?

私は成功せずに多くの可能なフォーマットを試しました。

アップデート:

SplitDateTimeWidgetdjango管理者がforを使用しているため、これを行うことは不可能のようですDateTimeField。ただし、別のウィジェットを使用して日付ピッカーを失ってもかまわない場合は、DateTimeInput代わりにウィジェットを使用できます。

最速の方法は、これをModelAdminクラスに追加することです。

formfield_overrides = {
    models.DateTimeField: {'widget': DateTimeInput},
}
4

2 に答える 2

5

まず、シリアル化/逆シリアル化の形式を定義します。

DATETIME_FORMAT="%Y-%m-%d %H:%M:%S"  

次に、管理URLを開きたい場合は、次のURLを使用します。

copiedArguments = {
   "fromDateTime": event.fromDateTime.strftime(DATETIME_FORMAT)
}
return HttpResponseRedirect(
            u"{}?{}".format(reverse('admin:events_event_add'), urllib.urlencode(copiedArguments)))

最後になりましたが、モデル管理者で日時を抽出します。

def get_changeform_initial_data(self, request):
    initialData = super(EventAdmin, self).get_changeform_initial_data(request)
    initialData["fromDateTime"] = datetime.datetime.strptime(request.GET["fromDateTime"],DATETIME_FORMAT)
    return initialData
于 2016-10-01T10:38:25.643 に答える
3

問題はウィジェットにあるようです。はでDateField正常に動作します?date=yyyy-mm-ddが、aDateTimeFieldはを使用しSplitDateTimeWidgetます。初期値として文字列を持つことはできません。

たぶん、文字列値を変換しようとするパッチを提案するか、 (可能であれば)SplitDateTimeWidgetの管理者デフォルトウィジェットを変更することができます。DateTimeField

于 2012-09-28T19:04:16.627 に答える