Django DateTimePicker отображается только для суперпользователей в моем приложении

Я использую виджет 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()

1 ответ

Похоже /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())});
  }
}

Они взяты из Джанго /admin/jsi18n/ под учетной записью администратора.

PS Вы можете найти ошибки JS в консоли JS вашего браузера, это может дать вам направление.

Другие вопросы по тегам