Django 后台
来源:互联网 发布:网站显示apache tomcat 编辑:程序博客网 时间:2024/05/22 17:35
后台的内容这里的介绍比较详细:
https://django-intro-zh.readthedocs.io/zh_CN/latest/part2/#_3
1. 在app里面修改admin.py
#引入models里面的哪个类并进行注册,就能在后台管理哪个类了from django.contrib import adminfrom .models import Articleadmin.site.register(Article)
定义 Model 的时候 写一个 unicode 函数(或 str函数)来保证后台显示的时候不是显示object而是直接显示名字
2. 在列表显示与字段相关的其它内容,添加搜索,筛选功能
#list_display来挑选要显示出来的字段,要新建一个继承自admin.ModelAdmin的类来承载from django.contribute import adminfrom .models import Articleclass ArticleAdmin(admin.ModelAdmin): list_display = ('title','pub_date','update_time',) #搜索功能:search_fields,可以按照 标题或内容搜索 search_fields = ('title','content') 筛选功能:list_filter 根据文章的发布时间去筛选 list_filter = ('pub_date')admin.site.register(Article,ArticleAdmin)
#也可以用来显示非字段内容,或者字段相关的内容class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) def my_property(self): return self.first_name + ' ' + self.last_name my_property.short_description = "Full name of the person" full_name = property(my_property)
from django.contrib import adminfrom .models import Article, Personclass ArticleAdmin(admin.ModelAdmin): list_display = ('title', 'pub_date', 'update_time',)class PersonAdmin(admin.ModelAdmin): list_display = ('full_name',)admin.site.register(Article, ArticleAdmin)admin.site.register(Person, PersonAdmin)
3. 自定义管理页面样式
https://django-intro-zh.readthedocs.io/zh_CN/latest/part2/#_9
4. 自定义后台特殊需求的功能
#定制加载的列表, 根据不同的人显示不同的内容列表,比如输入员只能看见自己输入的,审核员能看到所有的草稿,这时候就需要重写get_queryset方法#该类实现的功能是如果是超级管理员就列出所有的,如果不是,就仅列出访问者自己相关的class MyModelAdmin(admin.ModelAdmin): def get_queryset(self,request): qs = super(MyModelAdmin, self).get_queryset(request) if request.user.is_superuser: return qs else: return qs.filter(author=request.user)
#定制搜索功能(django 1.6及以上才有)#queryset 是默认的结果,search_term 是在后台搜索的关键词class PersonAdmin(admin.ModelAdmin): list_display = ('name', 'age') search_fields = ('name') def get_search_results(self,request,queryset,search_term): queryset,use_distinct = super(PersonAdmin, self).get_search_results(request,queryset,search_term) try: search_term_as_int = int(search_term) queryset |= self.model.objects.filter(age=search_term_as_int) except: pass return queryset, use_distinct
#修改保存时的一些操作,可以检查用户,保存的内容等,比如保存时加上添加人from django.contrib import adminclass ArticleAdmin(admin.ModelAdmin): def save_model(self,request,obj,form,change): obj.user = request.user obj.save()#其中obj是修改后的对象,form是返回的表单(修改后的),当新建一个对象时 change = False, 当修改一个对象时 change = True
#如果需要获取修改前的对象的内容可以用from django.contrib import adminclass ArticleAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): obj_original = self.model.objects.get(pk=obj.pk) obj.user = request.user obj.save()
#那么又有问题了,这里如果原来的obj不存在,也就是如果我们是新建的一个怎么办呢,这时候可以用try,except的方法尝试获取,当然更好的方法是判断一下这个对象是新建还是修改,是新建就没有 obj_original,是修改就有from django.contrib import adminclass ArticleAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): if change:# 更改的时候 obj_original = self.model.objects.get(pk=obj.pk) else:# 新增的时候 obj_original = None obj.user = request.user obj.save()
#删除时做一些处理from django.contrib import adminclass ArticleAdmin(admin.ModelAdmin): def delete_model(self, request, obj): """ Given a model instance delete it from the database. """ # handle something here obj.delete()
好困啊
推荐阅读:
http://code.ziqiangxuetang.com/django/django-admin.html
阅读全文
0 0
- Django后台
- Django后台
- Django-后台
- Django 后台
- Django后台管理
- Django(三)后台
- django后台入门--引言
- 拓展django后台
- django后台汉化
- django后台设置
- 搭建django后台环境
- django 后台服务
- DJANGO ADMIN后台设置
- [django]django后台css样式丢失
- 使用django做管理后台
- django&python&linux后台运行
- Django编写后台报错
- django后台做了些森么
- 向字典中添加重复键会报错
- [POJ 3207] Ikki's Story IV
- Android 方法数超出 65536限制的解决方法
- C#委托的简单学习:定义委托和使用、Func<int f1,out r1>、给自定义的类或数组排序(冒泡排序)
- 刷题——Ants POJ
- Django 后台
- 分库分表需要考虑的问题及方案
- php下载站实现思路
- 企业站的站长统计
- 1991-删去单词中相邻且重复的字母
- oracle密码过期
- stm32 通过 stm32 cubemx 配置 串口中断
- 写出我的第一个框架:迷你版Spring MVC
- ajax请求和表单请求时,input的required判断和click事件先后顺序