Django使用xadmin,文章页面分两个表,所以在adminx中使用inlines调用了关联表进行编辑,但是这种情况下不显示ueditor富文本编辑框。

Django使用xadmin,文章页面分两个表,所以在adminx中使用inlines调用了关联表进行编辑,但是这种情况下不显示ueditor富文本编辑框。

但是没有分表的其他内容编辑调用ueditor的时候,是能够正常显示的(说明我的ueditor安装是正确的),例如:案例内容编辑,它的models.py是这样的:

class case(models.Model):
    FLAG_CHOICES = (
        (u'p', u'网站建设'),
        (u's', u'网站优化'),
        (u'j', u'文案编辑'),
        (u't', u'百科优化'),
        (u'o', u'其他类型'),
    )
    title = models.CharField(verbose_name='项目名称', max_length=120)
    slimg = models.ImageField(verbose_name='缩略图', default='webimages/default.jpg', null=True)
    seotitle = models.CharField(verbose_name='SEO标题', max_length=120, null=True, blank=True)
    keywords = models.CharField(verbose_name='SEO关键词', max_length=150, null=True, blank=True)
    description = models.CharField(verbose_name='SEO描述', max_length=150, null=True, blank=True)
    flag = models.CharField(verbose_name='服务类型', max_length=2, choices=FLAG_CHOICES, default='o')
    content = UEditorField('项目介绍', width=800, height=500,
                           toolbars="full", imagePath="upimg/", filePath="upfile/",
                           upload_settings={"imageMaxSize": 1204000},
                           settings={}, command=None, blank=True
                           )
    pubdate = models.DateTimeField(verbose_name='发布时间', auto_now_add=True)
    istopping = models.BooleanField(verbose_name='是否置顶', default=0)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = '案例作品'


相应的adminx。py是这样的:

class caseAdmin(object):
    list_display = ('id', 'title','flag')
    search_fields = ('title',)
    model_icon = "fa fa-list"
    style_fields = {'content': 'ueditor'}



后台显示正常,如下图:

img

但是我的文章因为标题作者等和正文内容是分2个表的,models.py里是这样写的:

class detail(models.Model):
    FLAG_CHOICES = (
        (u'o', u'普通'),
        (u'f', u'幻灯'),
        (u'h', u'头条'),
        (u'c', u'推荐'),
        (u'a', u'特别'),
    )
    typeid = models.ForeignKey(artlist,verbose_name='所属栏目',on_delete=models.CASCADE)
    title = models.CharField(verbose_name='标题',max_length=120)
    keywords = models.CharField(verbose_name='关键词', max_length=150, null=True, blank=True)
    description = models.CharField(verbose_name='描述', max_length=150, null=True, blank=True)
    tags = models.CharField(verbose_name='tag标签',max_length=255,null=True,blank=True)
    flag = models.CharField(verbose_name='属性',max_length=2, choices=FLAG_CHOICES,default='o')
    limg = models.ImageField(verbose_name='缩略图',default='webimages/default.jpg',null=True)
    pubdate = models.DateTimeField(verbose_name='发布时间',auto_now_add=True)
    clicks = models.IntegerField(verbose_name='浏览量',default=random.randint(599,9955))
    istopping = models.BooleanField(verbose_name='是否置顶',default=0)
    ispushed = models.BooleanField(verbose_name='是否显示',default=0)
    def __str__(self):
        return self.title
    class Meta:
        verbose_name_plural = '文章列表'

class detailct(models.Model):
    content = UEditorField('内容', width=800, height=500,
                    toolbars="full", imagePath="upimg/", filePath="upfile/",
                    upload_settings={"imageMaxSize": 1204000},
                    settings={}, command=None, blank=True
                    )
    detail = models.OneToOneField("detail", on_delete=models.CASCADE)
    class Meta:
        verbose_name_plural = '文章正文'

相应的adminx.py是这样的:

class detailct(object):
    model = detailct
    extra = 1
    exclude = ('id', 'is_active')
    can_delete = False
    show_change_link = True
    style_fields = {'content':'ueditor'}

class detailAdmin(object):
    list_display = ('id','typeid', 'title','tags','flag','pubdate','clicks','ispushed')
    search_fields = ('title',)
    inlines = [detailct]
    list_per_page = 30
    model_icon = "fa fa-book"
    style_fields = {'content': 'ueditor'}

但是后台调用出来的就是一个普通的文本框,并不是富文本编辑器。

img

应该是分表调用的问题,这里不知道要怎么处理,请教!

【 2022-03-07 更新问题】
因为我的文章分两张表的,如何在不动这2张表的基础上实现在后台同一个界面编辑一篇文章的标题和正文等信息。也就是说,我这种情况下不用inline,还有什么改写的办法吗?

确保你Xadmin没有问题的话然后需要几个检查的地方
settings.py中

img


settings.py同级的url.py中

img


models.py中

img


xadmin.py中

img

就没有问题了。如果还不行重新下个xadmin吧。

给你个我自己的整合好的python3的 https://github.com/Escaflowne1985/Django3Tools

inlines 从detailAdmin挪到detailct里试下。

你看一下你有没有漏了以下过程: (重点关注一下配置)
1、下载Ueditor,最后版本:1.4.3.3
UEditor - 下载​ueditor.baidu.com
任意下载一个版本,如:PHP版,解压后,放在Django目录下。

img


本项目放在static/plugs/目录
2、安装DjangoUeditor
在线安装版本比较旧,不支持Python 3。从GitHub下载支持python3的DjangoUeditor3:
https://github.com/twz915/DjangoUeditor3/%E2%80%8Bgithub.com
然后离线安装,执行python setup.py install 安装。
3、配置DjangoUeditor
(1)、settings.py中的配置

img


InstallED_APPS中注册
在settings.py 最后添加设置及文件上传路径

UEDITOR_SETTINGS = {undefined
"toolbars": { #定义多个工具栏显示的按钮,允行定义多个
"name1": [['source', '|', 'bold', 'italic', 'underline']],
"name2": []
},
"images_upload":{undefined
"allow_type":"jpg,png,gif", #定义允许的上传的图片类型
"max_size":"10222kb" #定义允许上传的图片大小,0代表不限制
},
"files_upload":{undefined
"allow_type":"zip,rar,pdf,docx,doc,xls,xlsx,ppt,pptx,mp4,flv,swf", #定义允许的上传的文件类型
"max_size":"102222kb" #定义允许上传的文件大小,0代表不限制
},
"image_manager": {undefined
"location": "" #图片管理器的位置,如果没有指定,默认跟图片路径上传一样
}
}

DjangoEditor上传目录配置

MEDIA_URL='/static/ueupload/'
MEDIA_ROOT='./ExamWeb/static/ueupload/'
(2)、urls.py 中添加路由

url(r'^ueditor/', include('DjangoUeditor.urls'))

img


4、models.py中引入UEditorField并绑定

from DjangoUeditor.models import UEditorField

img


把需要使用富文本框的字段类型修改为UEditorField,此类型继承了TextField
5、模板页面使用

(1)、引入JS脚本

<script src="{% static '/plugs/ueditor/ueditor.config.js'%}"></script>
<script src="{% static '/plugs/ueditor/ueditor.all.min.js'%}"></script>

(2)、绑定富文本框

<script>var ue = UE.getEditor('qcontent',{undefined
'initialFrameWidth':1000,
'initialFrameHeight':150,
'serverUrl': "/ueditor/controller/?imagePathFormat=images/&filePathFormat=files/"
});
</script>

img


注意目录要带&amp;amp;quot;/&amp;amp;quot;
提示:settings.py 中关于上传路径的配置一定要注意,曾在这里浪费很多时间,无法正常上传。注意MEDIA_ROOT的设置,在服务器中目录的配置会有问题,用BASE_DIR来设置APP目录,否则在Aapache下上传目录会建到C盘或Aapache目录。
MEDIA_URL='/static/ueupload/'
MEDIA_ROOT=BASE_DIR+'/static/ueupload/'

img


配置成功界面