ジャンゴXadminの構成と使用

基本構成xadmin

  1. Djangoプロジェクトのルートディレクトリにxadmin源と、
  2. setting.py:INSTALLED_APPS=[...,'crispy_forms','Xadmin',...]
  3. インストールxadminの依存関係:pip3 install django-crispy-forms django-import-export django-reversion django formtools future httplib2 six xlwt xlsxwriter requests
  4. 表xadminの必要性を作成します。python3 manage.py migrate
  5. 設定したアクセス住所:urls.py:path('xadmin/', xadmin.site.urls)

xadmin構成リスト、検索とフィルタリング

  1. 登録されたモデルクラス:1アプリケーションでadminx.pyを作成します; 2。xadmin.site.register(modlename1,modlename2,...)

  2. バックグラウンドでアプリケーション名を設定します。apps.pyアドオンアプリケーションverbose_name='appname'

  3. モデルマネージャの作成:

    class ModlenameAdmin(object):
     list_display=['colume1','colume2',...] # 显示的字段
     search_fields=['colume1','colume2',...] # 搜索的字段
     list_filter=['colume1','colume2',...] # 过滤的字段
     list_editable=['colume1','colume2',...] # 在页面中直接编辑的字段
      '''
      1.列表中可以是字段,也可以是方法名
      2.如果表中含有外键,根据外键表的某个字段过滤则可以使用'tablename__column'格式写入
      '''

グローバルコンフィギュレーションxadmin

  1. アプリケーション/adminx.pyで

    class GlobalSettings(object):
        site_title = "左上角文字"
        site_footer = "页面底部文字"
        menu_style = "accordion" # 折叠左侧标题栏
    xadmin.site.register(xadmin.views.CommAdminView, GlobalSettings)
    
    class BaseSettings(object):
        enable_themes = True # 页面主题设置
        use_bootswatch = True
    xadmin.site.register(xadmin.views.BaseAdminView, BaseSettings)

高度な構成xadmin

  1. ページレイアウトエディタを変更します。
    1. 参考xadmin /プラグイン/ auth.py:デフget_form_layout(自己)

    2. モデルManagerは、コメントを追加しました:

      def get_form_layout(self):
              if self.org_obj: # 判断是否是编辑页面
                  self.form_layout = (
                          Main(
                              Fieldset("讲师信息", # 块名称
                                       'teacher','course_org',
                                       css_class='unsort no_title'
                                       ),
                              Fieldset("基本信息",
                                       'name', 'desc',
                                       Row('learn_times', 'degree'), # 两个字段在一行
                                       Row('category', 'tag'),
                                       'youneed_know', 'teacher_tell', 'detail',
                                       ),
                          ),
                          # 在页面右侧显示
                          Side(
                              Fieldset("访问信息",
                                       'fav_nums', 'click_nums', 'students','add_time'
                                       ),
                          ),
                          Side(
                              Fieldset("选择信息",
                                       'is_banner', 'is_classics'
                                       ),
                          )
                  )
              return super(NewCourseAdmin, self).get_form_layout()
  2. 著作権管理:バルク管理者ユーザー権限----->グループ
  3. ユーザーの権限に基づいてフィルタ一覧ページのデータ:

    モデルManagerは、コメントを追加しました:

    def queryset(self):
            qs = super().queryset()
            # if not self.request.user.is_superuser: # 判断用户权限
            qs = qs.filter(is_banner=True)
            return qs
  4. 保存、および制御ロジックを変更
    1. モデル・マネージャに、過負荷DEF save_models()メソッド

      def save_models(self):
              obj = self.new_obj # 获取编辑对象
              if not obj.id: # 判断是新增页面还是编辑页面
                  obj.save()
                  course = obj.course
                  course.students += 1
                  course.save()
    2. オーバーロードされるxadmin源では、この方法は、基準xadmin /ビュー/ edit.pyと、@filter_hook装飾され

  5. 複数のマネージャが同じテーブルを管理します
    1. 新モデルは---->クラスModelone(モデル名)クラスの継承モデルを動作させます。

      class Modelone(Modelname): # 新的model 继承已有的模型类
          class Meta:
              verbose_name = "xxx"
              verbose_name_plural = verbose_name
              proxy = True          # 在migrate的时候不会生成新的表
    2. ModelAdminのマネージャーの作成と登録

      class ModeloneAdmin(object): # 新建管理器
          pass
      
      class ModelAdmin(object): # 已有管理器
          pass
      # 注册管理器     
      xadmin.site.register(Modelone, ModeloneAdmin)
      xadmin.site.register(Model, ModelAdmin)
  6. 一覧ページが表示された画像
    1. この方法は、カスタムモデルクラスを追加します

      def show_image(self):
              from django.utils.safestring import mark_safe
              return mark_safe("<img src='{}'>".format(self.image.url))
      show_image.short_description = "图片" # 设置方法在列表页中的显示名称

      その他のカスタムメソッドは、同じように添加してもよいです。

    2. モデルマネージャで、

      list_display = [...,'show_image',...] # 添加到显示列表中
  7. 読み取り専用フィールドの設定、およびフィールドを除外し、デフォルトのソート

    以下のモデルマネージャを追加

    # !!!注意:某个字段不能同时存在于只读和隐藏中
    # 只读字段
    readonly_fields=['xx','xx',....]
    # 隐藏字段
    exclude=['xx','xx',...]
    # 根据某个字段排序
    ordering=['xx','xx',...]
  8. モデル・アイコンのアイコンによって変更xadminの背景モデル
    1. アイコンの名前でXXXX =「」FA FA-XXXX」マネージャーの追加model_icon
    2. 参考xadmin /静的/ xadmin /ベンダー/フォント素晴らしい(サードパーティのライブラリをチャート)
    3. フォント恐ろしいxadmin置き換えるダウンロードしてライブラリをグラフ化きます
    4. 中国の公式サイトのアイコン名をコピーし、model_iconの値を変更
  9. 同じページエディタで複数のテーブルのインライン設定
    1. adminx.py

      class LessonInline(object):
        model = Lesson # 指明模型(表)
        extra = 0 # 打开页面时默认不添加数据,无标签页
        style = 'tab' # 标签页形式 最好注销不进行设置,避免出现bug
        exclude = ['',''] # 隐藏字段
    2. モデルマネージャインラインに属性を追加します。= [LessonInline]

  10. ueditorリッチテキストエディタ
    1. プロジェクトのルートディレクトリにDjangoUeditor源と、

    2. 設定setting.py

      INSTALLED_APPS = [
          ...
          'DjangoUeditor',
          ...
      ]
    3. 設定urls.py

      urlpatterns = [
       ...
          #配置富文本相关的url
          url(r'^ueditor/',include('DjangoUeditor.urls' )),
      ]
    4. 使用中のモデルに

      エディタのフィールドには、いくつかのパラメータ:( GitHubのリファレンス)を変更するために必要な

      xxx = UEditorField(verbose_name="xx", width=600, height=300, imagePath="courses/ueditor/images/",
                                filePath="courses/ueditor/files/", default="")
    5. xadminは、プラグインを必要とし、ueditorをサポートしていません。

      1. プラグインのコピー----> xadmin / plugins /に(以下ueditor.pyを使用して、新しいコンテンツ)
      import xadmin
      from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
      from DjangoUeditor.models import UEditorField
      from DjangoUeditor.widgets import UEditorWidget
      from django.conf import settings
      
      
      class XadminUEditorWidget(UEditorWidget):
          def __init__(self,**kwargs):
              self.ueditor_options=kwargs
              self.Media.js = None
              super(XadminUEditorWidget,self).__init__(kwargs)
      
      class UeditorPlugin(BaseAdminPlugin):
      
          def get_field_style(self, attrs, db_field, style, **kwargs):
              if style == 'ueditor':
                  if isinstance(db_field, UEditorField):
                      widget = db_field.formfield().widget
                      param = {}
                      param.update(widget.ueditor_settings)
                      param.update(widget.attrs)
                      return {'widget': XadminUEditorWidget(**param)}
              return attrs
      
          def block_extrahead(self, context, nodes):
              js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js")         #自己的静态目录
              js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js")   #自己的静态目录
              nodes.append(js)
      
      xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
      xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
      1. ファイル名に追加/xadmin/plugins/init.py PLUGINS
    6. プロパティマネージャーを追加

      style_fields = {
              "columnname":"ueditor"
          }
    7. これは、フロントエンドテンプレートで表示されます。

      1. ストレージSTR中のデータ構造ので、HTMLテンプレートに付加位置に表示されるフィールド

        {%Autoescape%オフ} {{ColumnNameのは}} {%endautoescape%は}、STRは、HTMLコードに変換します。

  11. データ構成のインポートとエクスポート

    ueditorを追加するのと同じ

    1. /xadmin/plugins/importexport.py
    2. /xadmin/plugins/init.py PLUGINSは、重複を避けるために、ファイル名に輸出の取り消しを追加しました。

おすすめ

転載: www.cnblogs.com/blueandsky/p/11946406.html