怎么在xadmin的inline中使用ueditor输入框

新手上路,请多包涵

请教一下,在inline的model中如果存在自定义样式的字段,那么如何让样式在inline中任然有效。

比如这样的model

class A(models.Model):
    x = UeditorField()

class B(models.Model):
    x = models.ForeignKey(to=A, on_delete=modes.CASCAD)

在plugins中也定义了对应的ueditor插件。

# coding: utf-8
"""
Created by Lu Jianxin at 2019/03/19 15:40, for any questions contact me with jeeysie@gmail.com.
Some ideas of the file:
    0. xadmin集成ueditor插件
"""
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):
        # xadmin字段样式
        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)

之后我们注册并使用了它, 我在B类的管理器这样来使用它,他是有效的

style_fields = {'content': 'ueditor'}

但是, 一旦我们将它加入了inlines, 他的style就没有作用了,默认的是TextField的样式

class BInline(object):
    """
    专题内查看编辑章节
    """
    model = B
    extra = 0
    exclude = ('id', 'is_active')
    can_delete = False
    show_change_link = True

class AAdmin(object):
      inlines = (BInline,)

xadmin.site.register(A, AAdmin)

之后在A详情页,新建或者查看inline的B实例时, B却没有样式, 求教怎么将样式作用于inline的B
image

阅读 2.8k
1 个回答
class BInline(object):
    """
    专题内查看编辑章节
    """
    model = B
    extra = 0
    exclude = ('id', 'is_active')
    can_delete = False
    show_change_link = True
    style_fields = {'content': 'ueditor'} // 在inline类中,加入哪个字段ueditor样式显示
    
class AAdmin(object):
      inlines = (BInline,)

xadmin.site.register(A, AAdmin)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题