0

我正在使用 django DateTimePicker 小部件 - AdminSplitDateTime() - 在事件创建应用程序中,当登录用户具有超级用户权限时,一切都很好,但是当普通用户尝试访问创建表单时,小部件不会显示。

我不知道为什么会这样?以及如何克服这种行为?

这是我页面中包含的脚本

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/static/admin/js/core.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.min.js"></script>
<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>

她是我的表单代码

class Form(ModelForm):
    """

    """

    class Meta:
        model = Model
        exclude = ('creator')
    def __init__(self, *args, **kwargs):
        super(Form, self).__init__(*args, **kwargs)
        self.fields['start'].widget = widgets.AdminSplitDateTime()
        self.fields['end'].widget = widgets.AdminSplitDateTime()
4

1 回答 1

0

我猜/admin/jsi18n/非员工用户无法访问。您应该在第一个小部件之前添加一个 JS 脚本并在那里定义一些变量:

var catalog = {}
function pluralidx(count) { return (count == 1) ? 0 : 1; }
function gettext(msgid) { return msgid; }
function ngettext(singular, plural, count) { return count == 1 ? singular : plural; }
function gettext_noop(msgid) { return msgid; }
function interpolate(fmt, obj, named) {
  if (named) {
    return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
  } else {
    return fmt.replace(/%s/g, function(match){return String(obj.shift())});
  }
}

这些取自 django 的/admin/jsi18n/admin 用户。

PS 您可以在浏览器的 JS 控制台中找到 JS 错误,它可能会给您指明方向。

于 2012-04-25T04:24:29.020 回答