我的问题:
我有一个接受的模型DateTimeField。用户从django-admin. 但是,我无法获取用户的本地时区。所以我最好的办法是强迫用户在UTC. 但为了用户方便,我不希望他/她每次计算偏移量,然后计算UTC. Django似乎没有提供这样做的方法。
我打算做什么:
我想创建一个custom widget也可以让用户在timezone输入dateand的同时选择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-timeand timezone。因此,当用户单击Done此值时,该jQuery UI值将出现textbox在form.
我似乎遇到了障碍。完全想不出来:
无论如何,我无法弄清楚这会让我reference通过input它id还是name在我的widgets.py文件中。widgets.pyfile 是我打算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 字符串呈现它。有任何想法吗?我整晚都在这。需要一些帮助。