我的问题:
我有一个接受的模型DateTimeField
。用户从django-admin
. 但是,我无法获取用户的本地时区。所以我最好的办法是强迫用户在UTC
. 但为了用户方便,我不希望他/她每次计算偏移量,然后计算UTC
. Django
似乎没有提供这样做的方法。
我打算做什么:
我想创建一个custom widget
也可以让用户在timezone
输入date
and的同时选择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
在浏览器中显示一个 nice 并让用户输入一个date-time
and timezone
。因此,当用户单击Done
此值时,该jQuery UI
值将出现textbox
在form.
我似乎遇到了障碍。完全想不出来:
无论如何,我无法弄清楚这会让我reference
通过input
它id
还是name
在我的widgets.py
文件中。widgets.py
file 是我打算define
通过custom widget
从Widget
. *django.forms.widgets*
我通读了文档并发现Widget
该类在这种情况下有两种特别重要的方法。和render
方法value_from_data_dict
。前者用于呈现 html 模板,后者用于从数据字典中提取该值。(我可能错了。)但我想不出任何方法来链接我的代码的这两个部分。我需要帮助。
更新:
我研究了它,但它不起作用。这是我到目前为止所做的:
用户界面/管理员.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()},
}
小部件.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 管理员中没有下拉菜单或任何东西。所以我确信javascript函数没有被调用。我怎么称呼它?我不认为我可以沿着 html unicode 字符串呈现它。有任何想法吗?我整晚都在这。需要一些帮助。