from django.contrib import admin from django.contrib.auth.admin import UserAdmin # 从django继承过来后进行定制 from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.forms import UserCreationForm, UserChangeForm # Register your models here. from apps.AppInfo.models import MyUser, QXZdata, QXZstatus, Equip, Equip_type, QXZdata_New, JKdata, Article, Video_data,Product,Blog,QXZstatus_New,QXZswitchstatus,QXZswitchdata,\ CKArticle,GardenManage,GardenArea,Areacrop,Store_Manage,Hotel_Info,Hotel_Photo,FarmUser,FarmList,Pick_Pub,Sell_Manage,Person_Pick,QXZAutoswitch, Pic_Info,Sightsee_Info,QXZ_Alarm_Log,\ Experts # custom user admin class MyUserCreationForm(UserCreationForm): # 增加用户表单重新定义,继承自UserCreationForm def __init__(self, *args, **kwargs): super(MyUserCreationForm, self).__init__(*args, **kwargs) # 必填项: self.fields['email'].required = True # 为了让此字段在admin中为必选项,自定义一个form # self.fields['user_remark'].required = True # 其实这个name字段可以不用设定required,因为在models中的MyUser类中已经设定了blank=False,但email字段在系统自带User的models中已经设定为 #self.fields['user_phone'].required = True # email = models.EmailField(_('email address'), blank=True),除非直接改源码的django(不建议这么做),不然还是自定义一个表单做一下继承吧。 class MyUserChangeForm(UserChangeForm): # 编辑用户表单重新定义,继承自UserChangeForm def __init__(self, *args, **kwargs): super(MyUserChangeForm, self).__init__(*args, **kwargs) self.fields['email'].required = True class CustomUserAdmin(UserAdmin): def __init__(self, *args, **kwargs): super(CustomUserAdmin, self).__init__(*args, **kwargs) self.list_display = ( 'username', 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'email', 'is_active', 'is_staff', 'is_superuser','limit' ) self.search_fields = ('username', 'email', 'user_phone') self.form = MyUserChangeForm # 编辑用户表单,使用自定义的表单 self.add_form = MyUserCreationForm # 添加用户表单,使用自定义的表单 # 以上的属性都可以在django源码的UserAdmin类中找到,我们做以覆盖 # 这个方法在源码的admin/options.py文件的ModelAdmin这个类中定义,我们要重新定义它,以达到不同权限的用户,返回的表单内容不同 def changelist_view(self, request, extra_context=None): # 非super用户不能设定编辑是否为super用户: if not request.user.is_superuser: self.fieldsets = ((None, {'fields': ('username', 'password',)}), # 个人信息栏:_ 将('')里的内容国际化,这样可以让admin里的文字自动随着LANGUAGE_CODE切换中英文、 (_('Personal info'), {'fields': ( 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'email')}), # 权限栏: (_('Permissions'), { 'fields': ('is_active', 'is_staff', 'groups','limit')}), # 重要日期栏: (_('Important dates'), { 'fields': ('last_login', 'date_joined')}), ) # 这里('Permissions')中没有'is_superuser',此字段定义UserChangeForm表单中的具体显示内容,并可以分类显示 # 非超级用户创建用户: self.add_fieldsets = ((None, {'classes': ('wide',), 'fields': ('username', 'password1', 'password2', 'email', 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'is_active', 'is_staff', 'groups','limit'), }), ) # 此字段定义UserCreationForm表单中的具体显示内容 # super账户可以做任何事 else: self.fieldsets = ((None, {'fields': ('username', 'password',)}), # 个人信息栏: (_('Personal info'), {'fields': ( 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'email')}), # 权限栏: (_('Permissions'), { 'fields': ('is_active', 'is_staff', 'is_superuser','groups','limit')}), # 重要日期栏: (_('Important dates'), { 'fields': ('last_login', 'date_joined')}), ) # 超级用户创建用户: self.add_fieldsets = ((None, {'classes': ('wide',), 'fields': ('username', 'password1', 'password2', 'email', 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'is_active', 'is_staff', 'is_superuser', 'groups','limit' ), }), ) return super(CustomUserAdmin, self).changelist_view(request, extra_context) # 设置每页显示记录数: list_per_page = 10 admin.site.register(MyUser, CustomUserAdmin) @admin.register(Equip) class EquipAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 放大镜图标: #raw_id_fields = ('equip_type',) list_display = [ 'equip_id', 'equip_type', 'equip_name', 'equip_add_time', 'equip_user', 'equip_location', 'equip_desc', 'lng', 'lat', ] list_filter = ( 'equip_add_time', 'equip_type' ) search_fields = [ 'equip_id', 'equip_name' ] # 设置点击哪些字段可以进入修改页面: list_display_links = ( 'equip_id', 'equip_user' ) # 设置每页显示记录数: list_per_page = 10 EquipAdmin.short_description = u'设备' # 定制模型设备类型Equip_type的 Admin 后台 class Equip_typeAdmin(admin.ModelAdmin): list_display = [ 'type_id', 'type_name', 'type_add_time', 'topic_name' ] # 设置每页显示记录数: list_per_page = 10 admin.site.register(Equip_type, Equip_typeAdmin) # 气象站数据QXZstatus模型注册和装饰: @admin.register(QXZstatus) class QXZstatusAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'qxz_status', 'qxz_picture' ] # 列表显示项: list_display = [ 'equip_id', 'qxz_status', 'qxz_picture', 'upl_time' ] # 筛选过滤项: list_filter = ('equip_id',) # 点击进入详情修改项: list_display_links = ('equip_id',) # 链接:无 # list_display_links = None # 搜索项: search_fields = ['equip_id__equip_id'] # 设置显示外键字段: fk_fields = ('equip_id',) # 在admin后台类中加入raw_id_fields(只适用于外键)后,会显示外键的详细信息 raw_id_fields = ("equip_id",) # 设置每页显示记录数: list_per_page = 10 # 气象站数据QXZdata模型注册和装饰: @admin.register(QXZdata) class QXZdataAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'qxz_data', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'qxz_data', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 气象站数据QXZdata_New模型注册和装饰: @admin.register(QXZdata_New) class QXZdata_NewAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'e10', 'e11', 'e12', 'e13', 'e14', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'e10', 'e11', 'e12', 'e13', 'e14', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 气象站数据QXZdata_New模型注册和装饰: @admin.register(QXZstatus_New) class QXZstatus_NewAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'e10', 'e11', 'e12', 'e13', 'e14', 'interval', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'e10', 'e11', 'e12', 'e13', 'e14', 'interval', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 监控设备数据JKdata模型注册和装饰: @admin.register(JKdata) class JKdataAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'jk_token', 'jk_type', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'jk_token', 'jk_type', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 新闻表 @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ # 'id', 'title', 'intro', 'head_img', 'content', 'author', 'publish_date', 'hidden', 'priority' ] # 列表显示项: list_display = [ # 'id', 'title', 'intro', 'head_img', 'content', 'author', 'publish_date', 'hidden', 'priority' ] # 筛选过滤项: list_filter = ('title',) # 搜索项: search_fields = ['title'] # 设置每页显示记录数: list_per_page = 10 # 视频信息表 @admin.register(Video_data) class Video_dataAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ # 'id', 'title', 'intro', 'video_url', 'video_img', 'author', 'publish_date', 'hidden', 'priority' ] # 列表显示项: list_display = [ # 'id', 'title', 'intro', 'video_url', 'video_img', 'author', 'publish_date', 'hidden', 'priority' ] # 筛选过滤项: list_filter = ('title',) # 搜索项: search_fields = ['title'] # 设置每页显示记录数: list_per_page = 10 # 产品信息表 @admin.register(Product) class ProductAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ # 'id', 'title', 'intro', 'content', 'mobile', 'head_img', 'author', 'publish_date', 'hidden', 'priority' ] # 列表显示项: list_display = [ # 'id', 'title', 'intro', 'content', 'mobile', 'head_img', 'author', 'publish_date', 'hidden', 'priority' ] # 筛选过滤项: list_filter = ('title',) # 搜索项: search_fields = ['title'] # 设置每页显示记录数: list_per_page = 10 #注册该模型 @admin.register(Blog) class BlogAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['title', 'body'] # 气象站开关表QXZswitchstatus模型注册和装饰: @admin.register(QXZswitchstatus) class QXZswitchstatusAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'qxz_switch', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'qxz_switch', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 气象站开关表QXZswitchdata模型注册和装饰: @admin.register(QXZswitchdata) class QXZswitchdataAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'qxz_switch_data', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'qxz_switch_data', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 #注册该模型 @admin.register(CKArticle) class CKArticleAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['title','art_type','author','writer','intro','head_img','video_url','content','hidden','upl_time'] # 搜索项: search_fields = ['title'] # # 园区人员表 # @admin.register(GardenUser) # class GardenUserAdmin(admin.ModelAdmin): # # 列表页面显示字段 # list_display = ['username','mobile','gender'] # # 搜索项: # search_fields = ['username'] # 园区管理表 @admin.register(GardenManage) class GardenManageAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','addr','area','crop'] # 搜索项: search_fields = ['name'] # 地块表 @admin.register(GardenArea) class GardenAreaAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','user','garden','manage','location','addr','area','mobile','img','desc','upl_time'] # 搜索项: search_fields = ['name'] # 区域种植统计 @admin.register(Areacrop) class AreacropAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['cropname','area','crop_count','upl_time'] # 搜索项: search_fields = ['cropname'] # 销售管理 @admin.register(Sell_Manage) class SellManageAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['farm','name','num','money','upl_time'] # 搜索项: search_fields = ['name'] # 销售管理 @admin.register(Person_Pick) class PersonPickAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['farm','name','var','num','upl_time'] # 搜索项: search_fields = ['name'] # 库存管理 @admin.register(Store_Manage) class StoreManageAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','rtype','spec','rese','graden','upl_time'] # 搜索项: search_fields = ['name'] # 民宿表 @admin.register(Hotel_Info) class HotelInfoAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','price','intro','addr','location','person','hotel_img','hotel_tel','upl_time','author','content'] # 搜索项: search_fields = ['name'] # 民宿照片表 @admin.register(Hotel_Photo) class HotelPhotoAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['hotel','upl_time','addr'] # 搜索项: search_fields = ['addr'] # 农场管理者 @admin.register(FarmUser) class FarmUserAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','gender','mobile','upl_time'] # 搜索项: search_fields = ['name'] # 民宿照片表 @admin.register(FarmList) class FarmListAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['name','user','manage_user','garden','area','curr_var','farm_img','upl_time'] # 搜索项: search_fields = ['name'] # 采摘发布 @admin.register(Pick_Pub) class Pick_PubAdmin(admin.ModelAdmin): # 列表页面显示字段 list_display = ['farm','name','company','pick_img','upl_time','content','hidden'] # 搜索项: search_fields = ['name'] # 气象站阈值表QXZAutoswitch模型注册和装饰: @admin.register(QXZAutoswitch) class QXZAutoswitchAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'upl_time', 'qxz_auto', ] # 列表显示项: list_display = [ 'equip_id', 'upl_time', 'qxz_auto', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['equip_id__equip_id'] # 设置每页显示记录数: list_per_page = 10 # 气象站阈值表QXZAutoswitch模型注册和装饰: @admin.register(Pic_Info) class Pic_InfoAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'pic_user', 'locat1', 'locat2', 'pic_center', 'addr', 'locat_info', 'upl_time', ] # 列表显示项: list_display = [ 'pic_user', 'locat1', 'locat2', 'pic_center', 'addr', 'locat_info', 'upl_time', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['addr'] # 设置每页显示记录数: list_per_page = 10 # 景点 @admin.register(Sightsee_Info) class Sightsee_InfoAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'name', 'price', 'desc', 'location', 'addr', 'sightsee_stime', 'sightsee_etime', 'sightsee_img', 'sightsee_tel', 'guide_img', 'hidden', 'author', 'content', ] # 列表显示项: list_display = [ 'name', 'price', 'desc', 'location', 'addr', 'sightsee_stime', 'sightsee_etime', 'sightsee_img', 'sightsee_tel', 'guide_img', 'hidden', 'author', 'content', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['addr'] # 设置每页显示记录数: list_per_page = 10 # 气象站阈值表QXZAutoswitch模型注册和装饰: @admin.register(QXZ_Alarm_Log) class QXZ_Alarm_LogAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'equip_id', 'logs', 'ekey', 'upl_time', ] # 列表显示项: list_display = [ 'equip_id', 'logs', 'ekey', 'upl_time', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['addr'] # 设置每页显示记录数: list_per_page = 10 # 专家表 @admin.register(Experts) class ExpertsAdmin(admin.ModelAdmin): actions_on_bottom = False actions_on_top = True # 详情显示项: fields = [ 'name', 'relation', 'desc', 'pic', 'upl_time', ] # 列表显示项: list_display = [ 'name', 'relation', 'desc', 'pic', 'upl_time', ] # 筛选过滤项: list_filter = ('upl_time',) # 搜索项: search_fields = ['name'] # 设置每页显示记录数: list_per_page = 10