xadmin显示及重写xadmin

xadmin显示

Course类

class Course(models.Model):
    name = models.CharField(max_length=100,verbose_name=u"课程名")
    image = models.ImageField(upload_to="courses/%Y/%m",max_length=100,verbose_name=u"封面图片")
    desc = models.CharField(max_length=100,verbose_name=u"课程描述")
    degree = models.CharField(choices=(("gj",u"高级"),("zj",u"中级"),("cj",u"低级")),max_length=2,verbose_name=u"难度")
    learn_time = models.IntegerField(verbose_name=u"学习时长(分钟数)",default=0)
    students = models.IntegerField(verbose_name=u"学习人数",default=0)
    fav_nums = models.IntegerField(verbose_name=u"收藏人数",default=0)
    click_nums = models.IntegerField(verbose_name=u"点击人数",default=0)
    detail = models.TextField(verbose_name=u"课程详情")
    add_time = models.DateTimeField(verbose_name=u"添加时间",default=datetime.now)

    class Meta:
        verbose_name = u"课程"
        verbose_name_plural = verbose_name

Lesson类中的course作为Course的外键

class Lesson(models.Model):
    course = models.ForeignKey(Course,verbose_name=u"课程")
    name = models.CharField(max_length=100,verbose_name=u"章节名")
    add_time = models.DateTimeField(verbose_name=u"添加时间",default=datetime.now)

    class Meta:
        verbose_name = u"章节"
        verbose_name_plural = verbose_name

在adminx.py中注册

class LessonAdmin(object):
    list_display = ['course', 'name','add_time']
    search_fields = ['course', 'name']
    list_filter = ['course', 'name','add_time']

然后,在xadmin管理页面先添加2个Course对象


此时,查看章节页面的 过滤器是2个course对象


点击添加章节,课程也是2个course对象


这是因为Course类没有定义__str__方法

    def __str__(self):
        return self.name

此时,就是这样了


使用外键

想用外键添加Course的别的字段,可以在list_filter中设置 course__degree ,是双下划线

list_filter = ['course','course__degree', 'name','add_time']

这样的话就变成这样了


按字段排序,设置字段为只读,及隐藏字段
    ordering = ['-click_nums']  # 进入xadmin页面将某个字段倒序排列
    readonly_fields = ['click_nums']  # 将某个字段以只读形式
    exclude = ['fav_nums']    # 不显示某个字段
将外键设置成搜索形式

添加下面字段使带有外键的字段变成搜索格式。我没试成功

relfield_style = 'fk_ajax'

同一个model注册多个管理器

Model:Course作为Lesson和CourseResource的主键,如果想在Course中将这2个外键都显示,那么如下操作。注意如果Lesson(章节)model被Video(每课视频)作为主键关联,是不能这样写进去的。只能关联一层关系,不能多层关系

class LessonInline(object):
    model = Lesson
    extra = 0

class CourseResourceInline(object):
    model = CourseResource
    extra = 0
	
class CourseAdmin(object):
。。。
inlines = [LessonInline,CourseResourceInline]

那么这样在课程的xadmin页面就显示如下


按degree=cj字段 将Course分离成2个model

在model.py添加

class LowLevelCourse(Course):
    class Meta:
        verbose_name = u"低级课程"
        verbose_name_plural = verbose_name
        proxy = True   # 设置True只在xadmin中生存2个model管理,不生产数据表

在adminx.py添加

class CourseAdmin(object):
    list_display = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail','add_time']
    search_fields = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail']
    list_filter = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail','add_time']

    def queryset(self):
        qs = super(CourseAdmin,self).queryset()
        qs = qs.exclude(degree="cj")
        return qs

class LowLevelCourseAdmin(object):
    list_display = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail','add_time']
    search_fields = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail']
    list_filter = ['name','image','desc','degree','learn_time','students','fav_nums','click_nums','detail','add_time']

    def queryset(self):
        qs = super(LowLevelCourseAdmin,self).queryset()
        qs = qs.filter(degree="cj")
        return qs

xadmin.site.register(LowLevelCourse,LowLevelCourseAdmin)
xadmin.site.register(Course,CourseAdmin)

效果如下



重写xadmin

重写xadmin,需要把xadmin的源码放在extra_app中,如何放,查看

https://blog.csdn.net/qq_34964399/article/details/80369321

1. 如何修改用户信息表的css布局,默认的布局如下,


他的布局是按照 \extra_app\xadmin\plugins\auth.py  里的UserAmin类中的get_form_layout方法实现的,fieldset就跟上图的布局对应



2 给xadmin添加添加小头像


只要添加model_icon , 就会生成小头像


xadmin中的icon的css样式路径xadmin/static/xadmin/vendor/font-awesome 。从http://www.fontawesome.com.cn/

下载最新的样式,将解压后的css/fonts文件夹覆盖到xadmin中就是最新的。然后去在官网的icon图标库,选择相应的样式即可,填写到model_icon中即可




猜你喜欢

转载自blog.csdn.net/qq_34964399/article/details/80303544