admin.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. from django.contrib import admin
  2. from django.contrib.auth.admin import UserAdmin # 从django继承过来后进行定制
  3. from django.utils.translation import ugettext_lazy as _
  4. from django.contrib.auth.forms import UserCreationForm, UserChangeForm
  5. # Register your models here.
  6. from apps.AppInfo.models import MyUser, QXZdata, QXZstatus, Equip, Equip_type, QXZdata_New, JKdata, Article, Video_data,Product,Blog,QXZstatus_New,QXZswitchstatus,QXZswitchdata,\
  7. 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
  8. # custom user admin
  9. class MyUserCreationForm(UserCreationForm): # 增加用户表单重新定义,继承自UserCreationForm
  10. def __init__(self, *args, **kwargs):
  11. super(MyUserCreationForm, self).__init__(*args, **kwargs)
  12. # 必填项:
  13. self.fields['email'].required = True # 为了让此字段在admin中为必选项,自定义一个form
  14. # self.fields['user_remark'].required = True # 其实这个name字段可以不用设定required,因为在models中的MyUser类中已经设定了blank=False,但email字段在系统自带User的models中已经设定为
  15. #self.fields['user_phone'].required = True
  16. # email = models.EmailField(_('email address'), blank=True),除非直接改源码的django(不建议这么做),不然还是自定义一个表单做一下继承吧。
  17. class MyUserChangeForm(UserChangeForm): # 编辑用户表单重新定义,继承自UserChangeForm
  18. def __init__(self, *args, **kwargs):
  19. super(MyUserChangeForm, self).__init__(*args, **kwargs)
  20. self.fields['email'].required = True
  21. class CustomUserAdmin(UserAdmin):
  22. def __init__(self, *args, **kwargs):
  23. super(CustomUserAdmin, self).__init__(*args, **kwargs)
  24. self.list_display = (
  25. 'username', 'user_remark',
  26. 'user_phone',
  27. 'user_picture', 'user_pro',
  28. 'user_city', 'user_area',
  29. 'email', 'is_active',
  30. 'is_staff', 'is_superuser','limit'
  31. )
  32. self.search_fields = ('username', 'email', 'user_phone')
  33. self.form = MyUserChangeForm # 编辑用户表单,使用自定义的表单
  34. self.add_form = MyUserCreationForm # 添加用户表单,使用自定义的表单
  35. # 以上的属性都可以在django源码的UserAdmin类中找到,我们做以覆盖
  36. # 这个方法在源码的admin/options.py文件的ModelAdmin这个类中定义,我们要重新定义它,以达到不同权限的用户,返回的表单内容不同
  37. def changelist_view(self, request, extra_context=None):
  38. # 非super用户不能设定编辑是否为super用户:
  39. if not request.user.is_superuser:
  40. self.fieldsets = ((None, {'fields': ('username', 'password',)}),
  41. # 个人信息栏:_ 将('')里的内容国际化,这样可以让admin里的文字自动随着LANGUAGE_CODE切换中英文、
  42. (_('Personal info'), {'fields': (
  43. 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'email')}),
  44. # 权限栏:
  45. (_('Permissions'), {
  46. 'fields': ('is_active', 'is_staff', 'groups','limit')}),
  47. # 重要日期栏:
  48. (_('Important dates'), {
  49. 'fields': ('last_login', 'date_joined')}),
  50. ) # 这里('Permissions')中没有'is_superuser',此字段定义UserChangeForm表单中的具体显示内容,并可以分类显示
  51. # 非超级用户创建用户:
  52. self.add_fieldsets = ((None, {'classes': ('wide',),
  53. 'fields': ('username', 'password1', 'password2', 'email', 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'is_active',
  54. 'is_staff', 'groups','limit'),
  55. }),
  56. ) # 此字段定义UserCreationForm表单中的具体显示内容
  57. # super账户可以做任何事
  58. else:
  59. self.fieldsets = ((None, {'fields': ('username', 'password',)}),
  60. # 个人信息栏:
  61. (_('Personal info'), {'fields': (
  62. 'user_remark', 'user_phone', 'user_picture', 'user_pro', 'user_city', 'user_area', 'email')}),
  63. # 权限栏:
  64. (_('Permissions'), {
  65. 'fields': ('is_active', 'is_staff', 'is_superuser','groups','limit')}),
  66. # 重要日期栏:
  67. (_('Important dates'), {
  68. 'fields': ('last_login', 'date_joined')}),
  69. )
  70. # 超级用户创建用户:
  71. self.add_fieldsets = ((None,
  72. {'classes': ('wide',),
  73. 'fields': ('username', 'password1',
  74. 'password2', 'email',
  75. 'user_remark',
  76. 'user_phone', 'user_picture',
  77. 'user_pro', 'user_city',
  78. 'user_area', 'is_active',
  79. 'is_staff', 'is_superuser',
  80. 'groups','limit'
  81. ),
  82. }),
  83. )
  84. return super(CustomUserAdmin, self).changelist_view(request, extra_context)
  85. # 设置每页显示记录数:
  86. list_per_page = 10
  87. admin.site.register(MyUser, CustomUserAdmin)
  88. @admin.register(Equip)
  89. class EquipAdmin(admin.ModelAdmin):
  90. actions_on_bottom = False
  91. actions_on_top = True
  92. # 放大镜图标:
  93. #raw_id_fields = ('equip_type',)
  94. list_display = [
  95. 'equip_id',
  96. 'equip_type',
  97. 'equip_name',
  98. 'equip_add_time',
  99. 'equip_user',
  100. 'equip_location',
  101. 'equip_desc',
  102. 'lng',
  103. 'lat',
  104. ]
  105. list_filter = (
  106. 'equip_add_time',
  107. 'equip_type'
  108. )
  109. search_fields = [
  110. 'equip_id',
  111. 'equip_name'
  112. ]
  113. # 设置点击哪些字段可以进入修改页面:
  114. list_display_links = (
  115. 'equip_id',
  116. 'equip_user'
  117. )
  118. # 设置每页显示记录数:
  119. list_per_page = 10
  120. EquipAdmin.short_description = u'设备'
  121. # 定制模型设备类型Equip_type的 Admin 后台
  122. class Equip_typeAdmin(admin.ModelAdmin):
  123. list_display = [
  124. 'type_id',
  125. 'type_name',
  126. 'type_add_time',
  127. 'topic_name'
  128. ]
  129. # 设置每页显示记录数:
  130. list_per_page = 10
  131. admin.site.register(Equip_type, Equip_typeAdmin)
  132. # 气象站数据QXZstatus模型注册和装饰:
  133. @admin.register(QXZstatus)
  134. class QXZstatusAdmin(admin.ModelAdmin):
  135. actions_on_bottom = False
  136. actions_on_top = True
  137. # 详情显示项:
  138. fields = [
  139. 'equip_id',
  140. 'qxz_status',
  141. 'qxz_picture'
  142. ]
  143. # 列表显示项:
  144. list_display = [
  145. 'equip_id',
  146. 'qxz_status',
  147. 'qxz_picture',
  148. 'upl_time'
  149. ]
  150. # 筛选过滤项:
  151. list_filter = ('equip_id',)
  152. # 点击进入详情修改项:
  153. list_display_links = ('equip_id',)
  154. # 链接:无
  155. # list_display_links = None
  156. # 搜索项:
  157. search_fields = ['equip_id__equip_id']
  158. # 设置显示外键字段:
  159. fk_fields = ('equip_id',)
  160. # 在admin后台类中加入raw_id_fields(只适用于外键)后,会显示外键的详细信息
  161. raw_id_fields = ("equip_id",)
  162. # 设置每页显示记录数:
  163. list_per_page = 10
  164. # 气象站数据QXZdata模型注册和装饰:
  165. @admin.register(QXZdata)
  166. class QXZdataAdmin(admin.ModelAdmin):
  167. actions_on_bottom = False
  168. actions_on_top = True
  169. # 详情显示项:
  170. fields = [
  171. 'equip_id',
  172. 'upl_time',
  173. 'qxz_data',
  174. ]
  175. # 列表显示项:
  176. list_display = [
  177. 'equip_id',
  178. 'upl_time',
  179. 'qxz_data',
  180. ]
  181. # 筛选过滤项:
  182. list_filter = ('upl_time',)
  183. # 搜索项:
  184. search_fields = ['equip_id__equip_id']
  185. # 设置每页显示记录数:
  186. list_per_page = 10
  187. # 气象站数据QXZdata_New模型注册和装饰:
  188. @admin.register(QXZdata_New)
  189. class QXZdata_NewAdmin(admin.ModelAdmin):
  190. actions_on_bottom = False
  191. actions_on_top = True
  192. # 详情显示项:
  193. fields = [
  194. 'equip_id',
  195. 'upl_time',
  196. 'e1',
  197. 'e2',
  198. 'e3',
  199. 'e4',
  200. 'e5',
  201. 'e6',
  202. 'e7',
  203. 'e8',
  204. 'e9',
  205. 'e10',
  206. 'e11',
  207. 'e12',
  208. 'e13',
  209. 'e14',
  210. ]
  211. # 列表显示项:
  212. list_display = [
  213. 'equip_id',
  214. 'upl_time',
  215. 'e1',
  216. 'e2',
  217. 'e3',
  218. 'e4',
  219. 'e5',
  220. 'e6',
  221. 'e7',
  222. 'e8',
  223. 'e9',
  224. 'e10',
  225. 'e11',
  226. 'e12',
  227. 'e13',
  228. 'e14',
  229. ]
  230. # 筛选过滤项:
  231. list_filter = ('upl_time',)
  232. # 搜索项:
  233. search_fields = ['equip_id__equip_id']
  234. # 设置每页显示记录数:
  235. list_per_page = 10
  236. # 气象站数据QXZdata_New模型注册和装饰:
  237. @admin.register(QXZstatus_New)
  238. class QXZstatus_NewAdmin(admin.ModelAdmin):
  239. actions_on_bottom = False
  240. actions_on_top = True
  241. # 详情显示项:
  242. fields = [
  243. 'equip_id',
  244. 'upl_time',
  245. 'e1',
  246. 'e2',
  247. 'e3',
  248. 'e4',
  249. 'e5',
  250. 'e6',
  251. 'e7',
  252. 'e8',
  253. 'e9',
  254. 'e10',
  255. 'e11',
  256. 'e12',
  257. 'e13',
  258. 'e14',
  259. 'interval',
  260. ]
  261. # 列表显示项:
  262. list_display = [
  263. 'equip_id',
  264. 'upl_time',
  265. 'e1',
  266. 'e2',
  267. 'e3',
  268. 'e4',
  269. 'e5',
  270. 'e6',
  271. 'e7',
  272. 'e8',
  273. 'e9',
  274. 'e10',
  275. 'e11',
  276. 'e12',
  277. 'e13',
  278. 'e14',
  279. 'interval',
  280. ]
  281. # 筛选过滤项:
  282. list_filter = ('upl_time',)
  283. # 搜索项:
  284. search_fields = ['equip_id__equip_id']
  285. # 设置每页显示记录数:
  286. list_per_page = 10
  287. # 监控设备数据JKdata模型注册和装饰:
  288. @admin.register(JKdata)
  289. class JKdataAdmin(admin.ModelAdmin):
  290. actions_on_bottom = False
  291. actions_on_top = True
  292. # 详情显示项:
  293. fields = [
  294. 'equip_id',
  295. 'upl_time',
  296. 'jk_token',
  297. 'jk_type',
  298. ]
  299. # 列表显示项:
  300. list_display = [
  301. 'equip_id',
  302. 'upl_time',
  303. 'jk_token',
  304. 'jk_type',
  305. ]
  306. # 筛选过滤项:
  307. list_filter = ('upl_time',)
  308. # 搜索项:
  309. search_fields = ['equip_id__equip_id']
  310. # 设置每页显示记录数:
  311. list_per_page = 10
  312. # 新闻表
  313. @admin.register(Article)
  314. class ArticleAdmin(admin.ModelAdmin):
  315. actions_on_bottom = False
  316. actions_on_top = True
  317. # 详情显示项:
  318. fields = [
  319. # 'id',
  320. 'title',
  321. 'intro',
  322. 'head_img',
  323. 'content',
  324. 'author',
  325. 'publish_date',
  326. 'hidden',
  327. 'priority'
  328. ]
  329. # 列表显示项:
  330. list_display = [
  331. # 'id',
  332. 'title',
  333. 'intro',
  334. 'head_img',
  335. 'content',
  336. 'author',
  337. 'publish_date',
  338. 'hidden',
  339. 'priority'
  340. ]
  341. # 筛选过滤项:
  342. list_filter = ('title',)
  343. # 搜索项:
  344. search_fields = ['title']
  345. # 设置每页显示记录数:
  346. list_per_page = 10
  347. # 视频信息表
  348. @admin.register(Video_data)
  349. class Video_dataAdmin(admin.ModelAdmin):
  350. actions_on_bottom = False
  351. actions_on_top = True
  352. # 详情显示项:
  353. fields = [
  354. # 'id',
  355. 'title',
  356. 'intro',
  357. 'video_url',
  358. 'video_img',
  359. 'author',
  360. 'publish_date',
  361. 'hidden',
  362. 'priority'
  363. ]
  364. # 列表显示项:
  365. list_display = [
  366. # 'id',
  367. 'title',
  368. 'intro',
  369. 'video_url',
  370. 'video_img',
  371. 'author',
  372. 'publish_date',
  373. 'hidden',
  374. 'priority'
  375. ]
  376. # 筛选过滤项:
  377. list_filter = ('title',)
  378. # 搜索项:
  379. search_fields = ['title']
  380. # 设置每页显示记录数:
  381. list_per_page = 10
  382. # 产品信息表
  383. @admin.register(Product)
  384. class ProductAdmin(admin.ModelAdmin):
  385. actions_on_bottom = False
  386. actions_on_top = True
  387. # 详情显示项:
  388. fields = [
  389. # 'id',
  390. 'title',
  391. 'intro',
  392. 'content',
  393. 'mobile',
  394. 'head_img',
  395. 'author',
  396. 'publish_date',
  397. 'hidden',
  398. 'priority'
  399. ]
  400. # 列表显示项:
  401. list_display = [
  402. # 'id',
  403. 'title',
  404. 'intro',
  405. 'content',
  406. 'mobile',
  407. 'head_img',
  408. 'author',
  409. 'publish_date',
  410. 'hidden',
  411. 'priority'
  412. ]
  413. # 筛选过滤项:
  414. list_filter = ('title',)
  415. # 搜索项:
  416. search_fields = ['title']
  417. # 设置每页显示记录数:
  418. list_per_page = 10
  419. #注册该模型
  420. @admin.register(Blog)
  421. class BlogAdmin(admin.ModelAdmin):
  422. # 列表页面显示字段
  423. list_display = ['title', 'body']
  424. # 气象站开关表QXZswitchstatus模型注册和装饰:
  425. @admin.register(QXZswitchstatus)
  426. class QXZswitchstatusAdmin(admin.ModelAdmin):
  427. actions_on_bottom = False
  428. actions_on_top = True
  429. # 详情显示项:
  430. fields = [
  431. 'equip_id',
  432. 'upl_time',
  433. 'qxz_switch',
  434. ]
  435. # 列表显示项:
  436. list_display = [
  437. 'equip_id',
  438. 'upl_time',
  439. 'qxz_switch',
  440. ]
  441. # 筛选过滤项:
  442. list_filter = ('upl_time',)
  443. # 搜索项:
  444. search_fields = ['equip_id__equip_id']
  445. # 设置每页显示记录数:
  446. list_per_page = 10
  447. # 气象站开关表QXZswitchdata模型注册和装饰:
  448. @admin.register(QXZswitchdata)
  449. class QXZswitchdataAdmin(admin.ModelAdmin):
  450. actions_on_bottom = False
  451. actions_on_top = True
  452. # 详情显示项:
  453. fields = [
  454. 'equip_id',
  455. 'upl_time',
  456. 'qxz_switch_data',
  457. ]
  458. # 列表显示项:
  459. list_display = [
  460. 'equip_id',
  461. 'upl_time',
  462. 'qxz_switch_data',
  463. ]
  464. # 筛选过滤项:
  465. list_filter = ('upl_time',)
  466. # 搜索项:
  467. search_fields = ['equip_id__equip_id']
  468. # 设置每页显示记录数:
  469. list_per_page = 10
  470. #注册该模型
  471. @admin.register(CKArticle)
  472. class CKArticleAdmin(admin.ModelAdmin):
  473. # 列表页面显示字段
  474. list_display = ['title','art_type','author','writer','intro','head_img','video_url','content','hidden','upl_time']
  475. # 搜索项:
  476. search_fields = ['title']
  477. # # 园区人员表
  478. # @admin.register(GardenUser)
  479. # class GardenUserAdmin(admin.ModelAdmin):
  480. # # 列表页面显示字段
  481. # list_display = ['username','mobile','gender']
  482. # # 搜索项:
  483. # search_fields = ['username']
  484. # 园区管理表
  485. @admin.register(GardenManage)
  486. class GardenManageAdmin(admin.ModelAdmin):
  487. # 列表页面显示字段
  488. list_display = ['name','addr','area','crop']
  489. # 搜索项:
  490. search_fields = ['name']
  491. # 地块表
  492. @admin.register(GardenArea)
  493. class GardenAreaAdmin(admin.ModelAdmin):
  494. # 列表页面显示字段
  495. list_display = ['name','user','garden','manage','location','addr','area','mobile','img','desc','upl_time']
  496. # 搜索项:
  497. search_fields = ['name']
  498. # 区域种植统计
  499. @admin.register(Areacrop)
  500. class AreacropAdmin(admin.ModelAdmin):
  501. # 列表页面显示字段
  502. list_display = ['cropname','area','crop_count','upl_time']
  503. # 搜索项:
  504. search_fields = ['cropname']
  505. # 销售管理
  506. @admin.register(Sell_Manage)
  507. class SellManageAdmin(admin.ModelAdmin):
  508. # 列表页面显示字段
  509. list_display = ['farm','name','num','money','upl_time']
  510. # 搜索项:
  511. search_fields = ['name']
  512. # 销售管理
  513. @admin.register(Person_Pick)
  514. class PersonPickAdmin(admin.ModelAdmin):
  515. # 列表页面显示字段
  516. list_display = ['farm','name','var','num','upl_time']
  517. # 搜索项:
  518. search_fields = ['name']
  519. # 库存管理
  520. @admin.register(Store_Manage)
  521. class StoreManageAdmin(admin.ModelAdmin):
  522. # 列表页面显示字段
  523. list_display = ['name','rtype','spec','rese','farm','upl_time']
  524. # 搜索项:
  525. search_fields = ['name']
  526. # 民宿表
  527. @admin.register(Hotel_Info)
  528. class HotelInfoAdmin(admin.ModelAdmin):
  529. # 列表页面显示字段
  530. list_display = ['name','price','intro','addr','location','person','hotel_img','hotel_tel','upl_time','author','content']
  531. # 搜索项:
  532. search_fields = ['name']
  533. # 民宿照片表
  534. @admin.register(Hotel_Photo)
  535. class HotelPhotoAdmin(admin.ModelAdmin):
  536. # 列表页面显示字段
  537. list_display = ['hotel','upl_time','addr']
  538. # 搜索项:
  539. search_fields = ['addr']
  540. # 农场管理者
  541. @admin.register(FarmUser)
  542. class FarmUserAdmin(admin.ModelAdmin):
  543. # 列表页面显示字段
  544. list_display = ['name','gender','mobile','upl_time']
  545. # 搜索项:
  546. search_fields = ['name']
  547. # 民宿照片表
  548. @admin.register(FarmList)
  549. class FarmListAdmin(admin.ModelAdmin):
  550. # 列表页面显示字段
  551. list_display = ['name','user','manage_user','garden','area','curr_var','farm_img','upl_time']
  552. # 搜索项:
  553. search_fields = ['name']
  554. # 采摘发布
  555. @admin.register(Pick_Pub)
  556. class Pick_PubAdmin(admin.ModelAdmin):
  557. # 列表页面显示字段
  558. list_display = ['farm','name','company','pick_img','upl_time','content','hidden']
  559. # 搜索项:
  560. search_fields = ['name']
  561. # 气象站阈值表QXZAutoswitch模型注册和装饰:
  562. @admin.register(QXZAutoswitch)
  563. class QXZAutoswitchAdmin(admin.ModelAdmin):
  564. actions_on_bottom = False
  565. actions_on_top = True
  566. # 详情显示项:
  567. fields = [
  568. 'equip_id',
  569. 'upl_time',
  570. 'qxz_auto',
  571. ]
  572. # 列表显示项:
  573. list_display = [
  574. 'equip_id',
  575. 'upl_time',
  576. 'qxz_auto',
  577. ]
  578. # 筛选过滤项:
  579. list_filter = ('upl_time',)
  580. # 搜索项:
  581. search_fields = ['equip_id__equip_id']
  582. # 设置每页显示记录数:
  583. list_per_page = 10
  584. # 气象站阈值表QXZAutoswitch模型注册和装饰:
  585. @admin.register(Pic_Info)
  586. class Pic_InfoAdmin(admin.ModelAdmin):
  587. actions_on_bottom = False
  588. actions_on_top = True
  589. # 详情显示项:
  590. fields = [
  591. 'pic_user',
  592. 'locat1',
  593. 'locat2',
  594. 'pic_center',
  595. 'addr',
  596. 'locat_info',
  597. 'upl_time',
  598. ]
  599. # 列表显示项:
  600. list_display = [
  601. 'pic_user',
  602. 'locat1',
  603. 'locat2',
  604. 'pic_center',
  605. 'addr',
  606. 'locat_info',
  607. 'upl_time',
  608. ]
  609. # 筛选过滤项:
  610. list_filter = ('upl_time',)
  611. # 搜索项:
  612. search_fields = ['addr']
  613. # 设置每页显示记录数:
  614. list_per_page = 10
  615. # 景点
  616. @admin.register(Sightsee_Info)
  617. class Sightsee_InfoAdmin(admin.ModelAdmin):
  618. actions_on_bottom = False
  619. actions_on_top = True
  620. # 详情显示项:
  621. fields = [
  622. 'name',
  623. 'price',
  624. 'desc',
  625. 'location',
  626. 'addr',
  627. 'sightsee_stime',
  628. 'sightsee_etime',
  629. 'sightsee_img',
  630. 'sightsee_tel',
  631. 'guide_img',
  632. 'hidden',
  633. 'author',
  634. 'content',
  635. ]
  636. # 列表显示项:
  637. list_display = [
  638. 'name',
  639. 'price',
  640. 'desc',
  641. 'location',
  642. 'addr',
  643. 'sightsee_stime',
  644. 'sightsee_etime',
  645. 'sightsee_img',
  646. 'sightsee_tel',
  647. 'guide_img',
  648. 'hidden',
  649. 'author',
  650. 'content',
  651. ]
  652. # 筛选过滤项:
  653. list_filter = ('upl_time',)
  654. # 搜索项:
  655. search_fields = ['addr']
  656. # 设置每页显示记录数:
  657. list_per_page = 10
  658. # 气象站阈值表QXZAutoswitch模型注册和装饰:
  659. @admin.register(QXZ_Alarm_Log)
  660. class QXZ_Alarm_LogAdmin(admin.ModelAdmin):
  661. actions_on_bottom = False
  662. actions_on_top = True
  663. # 详情显示项:
  664. fields = [
  665. 'equip_id',
  666. 'logs',
  667. 'ekey',
  668. 'upl_time',
  669. ]
  670. # 列表显示项:
  671. list_display = [
  672. 'equip_id',
  673. 'logs',
  674. 'ekey',
  675. 'upl_time',
  676. ]
  677. # 筛选过滤项:
  678. list_filter = ('upl_time',)
  679. # 搜索项:
  680. search_fields = ['addr']
  681. # 设置每页显示记录数:
  682. list_per_page = 10