2016-05-09 8 views
1

Grappelliのデフォルトのdatepickerには、曜日の最初の曜日が表示されます。これは本当に刺激的です!私は月曜日がすべての私の現在および将来のモデルのための週の最初の曜日であることを望む。Grappelliの管理画面の日付ピッカーの週の開始

これを行う方法はありますか?

これまでのところ、「solution」という唯一のモデルでは、モデルのMediaクラスの変更が必要でした。しかし、この解決策は、以下であるとして動作していないよう:

任意の新しいモデルとして static/i18n/ui.datepicker-en-GB.jsは、いずれの場合においても

(function($) { 
    // datepicker, timepicker init 
    grappelli.initDateAndTimePicker = function() { 

     var options = { 
      closeText: "Done", 
      prevText: "Prev", 
      nextText: "Next", 
      currentText: "Today", 
      monthNames: [ "January","February","March","April","May","June", 
      "July","August","September","October","November","December" ], 
      monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], 
      dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], 
      dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], 
      dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], 
      weekHeader: "Wk", 
      dateFormat: "dd/mm/yy", 
      firstDay: 1, 
      isRTL: false, 
      showMonthAfterYear: false, 
      yearSuffix: "" 
     }; 

})(grp.jQuery); 

で、このソリューションは、最適である

class Monkey(ImportExportActionModelAdmin): 

    class Media: 
     js = ("static/i18n/ui.datepicker-en-GB.js") 

    ... 

日付を使用します同じメタクラスを定義しなければなりません。

答えて

0

上記のコードには間違いがあります。静的ディレクトリは自動的に追加されるよう

まず、AdminModel

class Monkey(ImportExportActionModelAdmin): 

    class Media: 
     js = ("i18n/ui.datepicker-en-GB.js",) 

    ... 

であるべきであり、js可変タプルでなければならない - コンマに気づきます。

私が使用したjavascrptは、firstDay: 1,optionsという変数に追加されたstatic/grappelli/js/grappelli.jsのコピーアンドペーストです。それはそうのように読み取ります

(function($) { 
    grappelli.initDateAndTimePicker = function() { 

     // HACK: get rid of text after DateField (hardcoded in django.admin) 
     $('p.datetime').each(function() { 
      var text = $(this).html(); 
      text = text.replace(/^\w*: /, ""); 
      text = text.replace(/<br>[^<]*: /g, "<br>"); 
      $(this).html(text); 
     }); 

     var options = { 
      firstDay: 1, // THIS IS THE ONLY CHANGE!!! 
      constrainInput: false, 
      showOn: 'button', 
      buttonImageOnly: false, 
      buttonText: '', 
      dateFormat: grappelli.getFormat('date'), 
      showButtonPanel: true, 
      showAnim: '', 
      // HACK: sets the current instance to a global var. 
      // needed to actually select today if the today-button is clicked. 
      // see onClick handler for ".ui-datepicker-current" 
      beforeShow: function(year, month, inst) { 
       grappelli.datepicker_instance = this; 
      } 
     }; 
     var dateFields = $("input[class*='vDateField']:not([id*='__prefix__'])"); 
     dateFields.datepicker(options); 

     if (typeof IS_POPUP != "undefined" && IS_POPUP) { 
      dateFields.datepicker('disable'); 
     } 

     // HACK: adds an event listener to the today button of datepicker 
     // if clicked today gets selected and datepicker hides. 
     // use on() because couldn't find hook after datepicker generates it's complete dom. 
     $(document).on('click', '.ui-datepicker-current', function() { 
      $.datepicker._selectDate(grappelli.datepicker_instance); 
      grappelli.datepicker_instance = null; 
     }); 

     // init timepicker 
     $("input[class*='vTimeField']:not([id*='__prefix__'])").grp_timepicker(); 

    }; 
})(grp.jQuery); 

は第三に、私は、日付ピッカーを必要なすべてのAdminModelsを修正しました。これはPITAであり、より良い方法があることを望みます。 ...ソリューションの

1

最初の部分は、既に@Sardathrionによって記載されているように、管理者ビューに別のJavaScriptファイルを追加することがありますされることがあります。

class MyModelAdmin(ModelAdmin): 
    class Media: 
     js = ('js/grappellihacks.js',) 

第二部は、再構成することですレンダリングされたdatepickerウィジェット。彼らは一般的なクラス属性を取得しているので、あなたのgrappellihacks.jsの内側に、このコードは十分なはずです:

grp.jQuery(function() { 
    grp.jQuery('.hasDatepicker').datepicker('option', 'firstDay', 1); 
}); 

オプションがjQuery UI documentationに記載されています。 grpアトリビュートは、grappelli.jsで設定されます。カスタムメディアファイルの前にadminテンプレートによってロードされます。

関連する問題