私の問題:
を受け入れるモデルがありますDateTimeField
。ユーザーは からこれを入力しdjango-admin
ます。しかし、ユーザーのローカル タイムゾーンを取得する方法がわかりません。したがって、私の最善の方法は、ユーザーに日時を入力するように強制することUTC
です。しかし、ユーザーの利便性のために、毎回オフセットを計算してから時間を計算する必要はありませんUTC
。Django
これを行う方法を提供していないようです。
私がやろうとしていること:
ユーザーがandを入力するとともに をcustom widget
選択できるようにするを作成したいと思います。このために、私はフォームに私のこのウィジェットを使用させるつもりです。timezone
date
time
jQuery datetime picker.
override
django admin
私がこれまでに試したこと:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> - jsFiddle demo by ioncache</title>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script>
<link rel="stylesheet" type="text/css" href="/css/normalize.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<script type='text/javascript' src="https://raw.github.com/trentrichardson/jQuery-Timepicker-Addon/master/jquery-ui-timepicker-addon.js"></script>
<link rel="stylesheet" type="text/css" href="https://raw.github.com/trentrichardson/jQuery-Timepicker-Addon/master/jquery-ui-timepicker-addon.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/smoothness/jquery-ui.css">
<style type='text/css'>
</style>
<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
$(function() {
$('#date-time-tz').datetimepicker({
dateFormat: $.datepicker.RFC_2822,
timeFormat: 'hh:mm:ss z',
showTimezone: true,
timezoneList: [
{"value": "0", "label": "UTC"},
{"value": "+60", "label": "FRANCE"},
{"value": "+330", "label": "INDIA"},
{"value": "-240", "label": "US EAST"},
{"value": "-420", "label": "US SF"}
]
});
});
});//]]>
</script>
</head>
<body>
<form name="time">
<div style="margin: 15px;">
<input id="date-time-tz" type="text" value="" name="date-time-tz">
<input type="submit" value="Submit">
</div>
</form>
</body>
</html>
action
または、このウィジェットをどこにも配置method
したくないためです。post
これが単純に行うことはUI
、ブラウザにナイスを表示し、ユーザーがdate-time
と を入力できるようにすることtimezone
です。Done
したがって、ユーザーがこれをクリックするとjQuery UI
、値textbox
がform.
ブロックにぶつかったようです。まったく考えられない:
とにかく、それが自分のファイル内またはファイル内でreference
これinput
を可能にするのかわかりません。file はから拡張するつもりのファイルです。私はドキュメントを読み、クラスにはこの場合特に重要な 2 つのメソッドがあることを理解しました。メソッドとメソッド。前者は html テンプレートをレンダリングし、後者はデータ dict からその値を抽出します。(私は間違っているかもしれません。) しかし、コードのこれら 2 つの部分をリンクする方法がわかりません。私は助けが必要です。id
name
widgets.py
widgets.py
define
custom widget
Widget
*django.forms.widgets*
Widget
render
value_from_data_dict
アップデート:
私はそれに取り組みましたが、うまくいきません。私が今までやってきたことは次のとおりです。
ui/admin.py
class MyModelAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("style/jquery-ui.css",
"style/jquery-ui-timepicker-addon.css",)
}
js = ("js/jquery-ui.js",
"js/jquery-ui-timepicker-addon.js",
"js/tz_widget.js",)
formfield_overrides = {
models.DateTimeField : {'widget': TimezoneDate()},
}
widgets.py
DATE_FORMAT = "%m-%d-%y"
class TimezoneDate(forms.widgets.Widget):
def __init__(self, attrs=None):
super(TimezoneDate, self).__init__(attrs)
def render(self, name, value, attrs=None):
if value is None:
vstr = ''
elif hasattr(value, 'strftime'):
vstr = datetime_safe.new_datetime(value).stftime(DATE_FORMAT)
else:
vstr = value
id = "%s" % name
args = \
"<input type=\"text\" value=\"%s\" name=\"%s\" id=\"date_time_tz\" />" % \
(vstr, name)
return mark_safe(u"\n".join(args))
そして、ここにtz_widget.js があります:
$(window).load(function(){
$(function() {
$('#date-time-tz').datetimepicker({
dateFormat: $.datepicker.RFC_2822,
timeFormat: 'hh:mm:ss z',
showTimezone: true,
timezoneList: [
{"value": "0", "label": "UTC"},
{"value": "+60", "label": "FRANCE"},
{"value": "+330", "label": "INDIA"},
{"value": "-240", "label": "US EAST"},
{"value": "-420", "label": "US SF"}
]
});
});
});
私が立ち往生しているのは、tz_widget.js から JavaScript を呼び出す方法です。django admin には、ドロップダウンなどはありません。したがって、JavaScript関数が呼び出されていないと確信しています。どのように呼び出すことができますか?HTMLのユニコード文字列に沿ってレンダリングできるとは思いません。何か案は?私は一晩中これにいました。助けが必要です。