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





# 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','farm','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','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
