Django中xadmin后台编辑文章功能(当文章是分2个表的时候)代码如何写?

问题描述
我的文章正文内容和其他属性内容分了两个表写的,models内容编辑如下:

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)
    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)
    # def __str__(self):
    #     return self.description
    class Meta:
        verbose_name_plural = '文章正文'

现在的adminx.py是这样写的:

class detailAdmin(object):
    list_display = ('id','typeid', 'title','tags','flag','pubdate','clicks','istopping')
    search_fields = ('title',)

但是后台编辑文章的时候怎么才能显示出正文内容的编辑呢?

img

你可以参考下: 我看你是不是没有配置插件
这是UEditorField函数

content=UEditorField(verbose_name='博客内容',
                         width=700,
                         height=400,
                         toolbars='full',
                         imagePath='ueditor/images/',
                         filePath='ueditor/files/',
                         upload_settings={'imageMaxSizing':1024000},
                         default='')


xadmin中添加插件ueditor
由于已经将xadmin源文件拷贝到了项目下,为extra_apps/xadmin,在xadmin下的plugin中新建一个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)

将ueditor插件添加到plugins中的__init__.py的PLUGINS中

img

找到app下的adminx.py文件,配置插件

img

配置上传文件的加载路径

在settings里面配置

MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,'media')
在settings里面配置
from django.views.static import serve
在urls里面配置
url(r'^media/(?P.*)$',serve,{"document_root":settings.MEDIA_ROOT},name='media')

在xadmin.py里面 class detailctAdmin 添加:
list_editable = ['detail']
试试?