models.py 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899
  1. from django.db import models
  2. from ckeditor.fields import RichTextField
  3. import django.utils.timezone as timezone
  4. from django.contrib.auth.models import AbstractUser
  5. from django.contrib.auth.models import Group, GroupManager
  6. import datetime
  7. from ckeditor_uploader.fields import RichTextUploadingField
  8. # Create your models here.
  9. # 继承AbstractUser类
  10. class MyUser(AbstractUser):
  11. user_remark = models.TextField(u'用户备注', max_length=200, blank=True)
  12. user_phone = models.CharField(u'用户手机', max_length=16, blank=True)
  13. user_picture = models.ImageField(u'用户头像', upload_to="guser_photo/", default="guser_photo/default.png")
  14. user_pro = models.CharField(u'用户省', max_length=50, blank=True)
  15. user_city = models.CharField(u'用户市', max_length=50, blank=True)
  16. user_area = models.CharField(u'用户区', max_length=50, blank=True)
  17. limit = models.TextField(u'用户权限', blank=True, null=True)
  18. class Meta:
  19. verbose_name = u'用户列表'
  20. verbose_name_plural = verbose_name
  21. ordering = ['-date_joined']
  22. get_latest_by = 'date_joined'
  23. # 设备类型列表:
  24. class Equip_type(models.Model):
  25. type_id = models.PositiveIntegerField(u'设备类型编号', primary_key=True)
  26. type_name = models.CharField(u'设备类型名称', max_length=50, blank=True)
  27. type_add_time = models.DateTimeField(u'设备类型添加时间', default=timezone.now)
  28. topic_name = models.CharField(u'主题简称', max_length=10, blank=True)
  29. def __str__(self):
  30. return self.type_name
  31. class Meta:
  32. verbose_name = u"设备类型表"
  33. verbose_name_plural = verbose_name
  34. ordering = ['-type_add_time']
  35. get_latest_by = 'type_add_time'
  36. # 设备列表:
  37. class Equip(models.Model):
  38. equip_id = models.CharField(u'设备id', max_length=30, primary_key=True)
  39. equip_user = models.ForeignKey(
  40. MyUser, blank=True, null=True, verbose_name=u'设备用户')
  41. equip_type = models.ForeignKey(
  42. Equip_type, blank=True, null=True, verbose_name=u'设备类型')
  43. equip_name = models.CharField(u'设备名称', max_length=100, blank=True)
  44. equip_add_time = models.DateTimeField(u'设备添加时间', default=timezone.now)
  45. equip_location = models.CharField(u'设备位置', max_length=150, blank=True)
  46. equip_desc = models.CharField(u'设备状态', max_length=5, blank=True,null=True)
  47. lng = models.CharField(u'经度', max_length=50, blank=True,null=True)
  48. lat = models.CharField(u'维度', max_length=50, blank=True,null=True)
  49. def __str__(self):
  50. return self.equip_id
  51. class Meta:
  52. verbose_name = u"设备列表"
  53. verbose_name_plural = verbose_name
  54. ordering = ['-equip_add_time']
  55. get_latest_by = 'equip_add_time'
  56. permissions = (
  57. ("can_see_scd", "Can see scd"),
  58. ("can_see_cbd", "Can see cbd"),
  59. ("can_see_ybq", "Can see ybq"),
  60. ("can_see_qxz", "Can see qxz"),
  61. ("can_see_jk", "Can see jk"),
  62. ("can_see_bzy", "Can see bzy"),
  63. )
  64. # 气象站状态:
  65. # 气象站最新数据记录
  66. class QXZstatus(models.Model):
  67. equip_id = models.ForeignKey(Equip)
  68. #auto_now=True:媒体更新状态表时,随之更新上报时间!!!
  69. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  70. qxz_status = models.TextField(u'气象站状态', blank=True, null=True)
  71. interval = models.CharField(u'设备数据上传时间间隔', max_length=30, blank=True, null=True)
  72. qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png")
  73. # qxz_picture = models.CharField(u'气象站图片', max_length=200, default="qxz_photo/default.png")
  74. class Meta:
  75. verbose_name = u"气象站-状态表"
  76. verbose_name_plural = verbose_name
  77. ordering = ['-equip_id__equip_add_time']
  78. get_latest_by = 'equip_id__equip_add_time'
  79. # 气象站短信预警
  80. class QXZ_Alarm(models.Model):
  81. equip_id = models.ForeignKey(Equip)
  82. conf = models.TextField(u'短信配置', blank=True, null=True)
  83. tel = models.CharField(u'手机号',max_length=20, blank=True)
  84. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  85. class Meta:
  86. verbose_name = u"气象站短信预警"
  87. verbose_name_plural = verbose_name
  88. ordering = ['-upl_time']
  89. get_latest_by = 'upl_time'
  90. # 气象站数据记录:
  91. # 气象站全部数据记录
  92. class QXZdata(models.Model):
  93. equip_id = models.ForeignKey(Equip)
  94. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  95. qxz_data = models.TextField(u'气象站数据', blank=True, null=True)
  96. class Meta:
  97. verbose_name = u'气象站-数据表'
  98. verbose_name_plural = verbose_name
  99. ordering = ['-upl_time']
  100. get_latest_by = 'upl_time'
  101. # 值#enum#通道
  102. # 新气象站状态记录:
  103. class QXZstatus_New(models.Model):
  104. equip_id = models.ForeignKey(Equip)
  105. is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  106. off_time = models.DateTimeField(u'离线时间', blank=True,null=True)
  107. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  108. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  109. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  110. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  111. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  112. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  113. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  114. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  115. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  116. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  117. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  118. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  119. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  120. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  121. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  122. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  123. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  124. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  125. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  126. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  127. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  128. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  129. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  130. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  131. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  132. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  133. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  134. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  135. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  136. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  137. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  138. lng = models.CharField(u'经度', max_length=50, blank=True)
  139. lat = models.CharField(u'维度', max_length=50, blank=True)
  140. qxz_picture = models.ImageField(u'气象站图片', upload_to="qxz_photo/", default="qxz_photo/default.png")
  141. interval = models.CharField(u'设备数据上传时间间隔', max_length=30, blank=True, null=True)
  142. class Meta:
  143. verbose_name = u'气象站-状态表-新'
  144. verbose_name_plural = verbose_name
  145. ordering = ['-upl_time']
  146. get_latest_by = 'upl_time'
  147. # 新气象站数据记录:
  148. # 新气象站全部数据记录
  149. class QXZdata_New(models.Model):
  150. equip_id = models.ForeignKey(Equip)
  151. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  152. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  153. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  154. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  155. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  156. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  157. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  158. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  159. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  160. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  161. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  162. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  163. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  164. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  165. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  166. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  167. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  168. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  169. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  170. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  171. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  172. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  173. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  174. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  175. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  176. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  177. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  178. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  179. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  180. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  181. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  182. class Meta:
  183. verbose_name = u'气象站-数据表-新'
  184. verbose_name_plural = verbose_name
  185. ordering = ['-upl_time']
  186. get_latest_by = 'upl_time'
  187. # 气象站预警列表
  188. class QXZ_Warning(models.Model):
  189. equip_id = models.ForeignKey(Equip)
  190. warning_set = models.TextField(u'气象站阈值', blank=True, null=True)
  191. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  192. class Meta:
  193. verbose_name = u'气象站-预警表'
  194. verbose_name_plural = verbose_name
  195. ordering = ['-upl_time']
  196. get_latest_by = 'upl_time'
  197. # 气象站开关表
  198. class QXZswitchstatus(models.Model):
  199. equip_id = models.ForeignKey(Equip)
  200. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  201. qxz_switch = models.TextField(u'气象站开关', blank=True, null=True)
  202. class Meta:
  203. verbose_name = u'气象站-开关表'
  204. verbose_name_plural = verbose_name
  205. ordering = ['-upl_time']
  206. get_latest_by = 'upl_time'
  207. # 气象站开关配置表
  208. class QXZswitchdata(models.Model):
  209. equip_id = models.ForeignKey(Equip)
  210. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  211. qxz_switch_data = models.TextField(u'气象站开关名字', blank=True, null=True)
  212. class Meta:
  213. verbose_name = u'气象站-开关配置表'
  214. verbose_name_plural = verbose_name
  215. ordering = ['-upl_time']
  216. get_latest_by = 'upl_time'
  217. # 气象站阈值表
  218. class QXZAutoswitch(models.Model):
  219. equip_id = models.ForeignKey(Equip)
  220. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  221. qxz_auto = models.TextField(u'气象站阈值', blank=True, null=True)
  222. class Meta:
  223. verbose_name = u'气象站-阈值表'
  224. verbose_name_plural = verbose_name
  225. ordering = ['-upl_time']
  226. get_latest_by = 'upl_time'
  227. # 气象站基础信息表
  228. class QXZ_Base_Info(models.Model):
  229. equip_id = models.ForeignKey(Equip)
  230. volt = models.CharField(u'电压', max_length=20, blank=True, null=True)
  231. rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True)
  232. iccid = models.CharField(u'设备卡号', max_length=50, blank=True, null=True)
  233. lng = models.CharField(u'经度', max_length=50, blank=True, null=True)
  234. lat = models.CharField(u'纬度', max_length=50, blank=True, null=True)
  235. led = models.CharField(u'led点阵屏', max_length=10, blank=True, null=True)
  236. ledinfo = models.CharField(u'led屏幕内容', max_length=100, blank=True, null=True)
  237. dver = models.CharField(u'设备版本号', max_length=100, blank=True, null=True)
  238. auto_locat = models.CharField(u'经纬度判断', max_length=50, default="1")
  239. # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  240. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  241. class Meta:
  242. verbose_name = u"气象站基础信息表"
  243. verbose_name_plural = verbose_name
  244. ordering = ['-upl_time']
  245. get_latest_by = 'upl_time'
  246. # 气象站基础信息表
  247. class QXZ_Info_Record(models.Model):
  248. equip_id = models.ForeignKey(Equip)
  249. volt = models.CharField(u'电压', max_length=20, blank=True, null=True)
  250. rssi = models.CharField(u'信号强度', max_length=20, blank=True, null=True)
  251. # is_online = models.CharField(u'在线状态', max_length=5, blank=True,null=True)
  252. upl_time = models.DateTimeField(u'上报时间', auto_now=True)
  253. class Meta:
  254. verbose_name = u"气象站信息历史"
  255. verbose_name_plural = verbose_name
  256. ordering = ['-upl_time']
  257. get_latest_by = 'upl_time'
  258. # 值#enum#通道
  259. # 新气象站配置表
  260. class QXZ_Conf(models.Model):
  261. equip_id = models.ForeignKey(Equip)
  262. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  263. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  264. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  265. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  266. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  267. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  268. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  269. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  270. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  271. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  272. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  273. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  274. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  275. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  276. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  277. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  278. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  279. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  280. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  281. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  282. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  283. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  284. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  285. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  286. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  287. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  288. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  289. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  290. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  291. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  292. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  293. class Meta:
  294. verbose_name = u'气象站标题配置'
  295. verbose_name_plural = verbose_name
  296. ordering = ['-upl_time']
  297. get_latest_by = 'upl_time'
  298. # 值#enum#通道
  299. # 新气象站配置表
  300. class QXZ_Default_Conf(models.Model):
  301. equip_id = models.ForeignKey(Equip)
  302. e1 = models.CharField(u'通道1', max_length=30, blank=True, null=True)
  303. e2 = models.CharField(u'通道2', max_length=30, blank=True, null=True)
  304. e3 = models.CharField(u'通道3', max_length=30, blank=True, null=True)
  305. e4 = models.CharField(u'通道4', max_length=30, blank=True, null=True)
  306. e5 = models.CharField(u'通道5', max_length=30, blank=True, null=True)
  307. e6 = models.CharField(u'通道6', max_length=30, blank=True, null=True)
  308. e7 = models.CharField(u'通道7', max_length=30, blank=True, null=True)
  309. e8 = models.CharField(u'通道8', max_length=30, blank=True, null=True)
  310. e9 = models.CharField(u'通道9', max_length=30, blank=True, null=True)
  311. e10 = models.CharField(u'通道10', max_length=30, blank=True, null=True)
  312. e11 = models.CharField(u'通道11', max_length=30, blank=True, null=True)
  313. e12 = models.CharField(u'通道12', max_length=30, blank=True, null=True)
  314. e13 = models.CharField(u'通道13', max_length=30, blank=True, null=True)
  315. e14 = models.CharField(u'通道14', max_length=30, blank=True, null=True)
  316. e15 = models.CharField(u'通道15', max_length=30, blank=True, null=True)
  317. e16 = models.CharField(u'通道16', max_length=30, blank=True, null=True)
  318. e17 = models.CharField(u'通道17', max_length=30, blank=True, null=True)
  319. e18 = models.CharField(u'通道18', max_length=30, blank=True, null=True)
  320. e19 = models.CharField(u'通道19', max_length=30, blank=True, null=True)
  321. e20 = models.CharField(u'通道20', max_length=30, blank=True, null=True)
  322. e21 = models.CharField(u'通道21', max_length=30, blank=True, null=True)
  323. e22 = models.CharField(u'通道22', max_length=30, blank=True, null=True)
  324. e23 = models.CharField(u'通道23', max_length=30, blank=True, null=True)
  325. e24 = models.CharField(u'通道24', max_length=30, blank=True, null=True)
  326. e25 = models.CharField(u'通道25', max_length=30, blank=True, null=True)
  327. e26 = models.CharField(u'通道26', max_length=30, blank=True, null=True)
  328. e27 = models.CharField(u'通道27', max_length=30, blank=True, null=True)
  329. e28 = models.CharField(u'通道28', max_length=30, blank=True, null=True)
  330. e29 = models.CharField(u'通道29', max_length=30, blank=True, null=True)
  331. e30 = models.CharField(u'通道30', max_length=30, blank=True, null=True)
  332. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  333. class Meta:
  334. verbose_name = u'气象站标题默认配置'
  335. verbose_name_plural = verbose_name
  336. ordering = ['-upl_time']
  337. get_latest_by = 'upl_time'
  338. # 监控设备token表
  339. class JKdata(models.Model):
  340. equip_id = models.ForeignKey(Equip, blank=True, null=True, verbose_name=u'设备ID')
  341. upl_time = models.DateTimeField(u'监控token获取时间', default=timezone.now)
  342. # 萤石云accesstoken一周过期
  343. jk_token = models.TextField(u'监控设备所需token', blank=True, null=True)
  344. jk_type = models.CharField(u'监控设备类型', max_length=10, blank=True, null=True)
  345. class Meta:
  346. verbose_name = u'监控-数据表'
  347. verbose_name_plural = verbose_name
  348. ordering = ['-upl_time']
  349. get_latest_by = 'upl_time'
  350. class Article(models.Model):
  351. '''
  352. 新闻表
  353. '''
  354. #标题最大长度255,不能重名
  355. title = models.CharField(u'文章标题',max_length=255,unique=True)
  356. #文章简介
  357. intro = models.CharField(u'文章简介',max_length=255,unique=True)
  358. #上传文件
  359. head_img = models.ImageField(upload_to="news_photo/")
  360. #文章内容(文章内容可能有很多,所以我们就不用"CharField"来写了,我们用TextField,不用规定他多长了,为可扩展长度)
  361. content = models.TextField(u"内容")
  362. #文章作者
  363. author = models.ForeignKey(MyUser,verbose_name="作者")
  364. #发布日期
  365. publish_date = models.DateTimeField(default=timezone.now, verbose_name='发布日期', help_text="发布日期")
  366. #是否隐藏
  367. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  368. #帖子的优先级
  369. priority = models.IntegerField(default=1000,verbose_name="优先级")
  370. # def __unicode__(self):
  371. # return "<%s,author:%s>" % (self.title,self.author)
  372. def __str__(self):
  373. return self.title
  374. class Meta:
  375. verbose_name = '新闻文章'
  376. verbose_name_plural = verbose_name
  377. # 视频数据
  378. class Video_data(models.Model):
  379. #标题最大长度255,不能重名
  380. title = models.CharField(u'视频标题',max_length=255,unique=True)
  381. #视频简介
  382. intro = models.CharField(u'视频简介',max_length=255,unique=True)
  383. #上传文件
  384. video_url = models.FileField(upload_to="videos/", null=True, blank=True, verbose_name="视频内容")
  385. #视频封面
  386. video_img = models.ImageField(upload_to="video_photo/", verbose_name="视频封面")
  387. #视频作者
  388. author = models.ForeignKey(MyUser,verbose_name="作者")
  389. #发布日期
  390. publish_date = models.DateTimeField(default=timezone.now, verbose_name='发布日期', help_text="发布日期")
  391. #是否隐藏
  392. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  393. #视频的优先级
  394. priority = models.IntegerField(default=1000,verbose_name="优先级")
  395. # def __unicode__(self):
  396. # return "<%s,author:%s>" % (self.title,self.author)
  397. def __str__(self):
  398. return self.title
  399. class Meta:
  400. verbose_name = '视频描述'
  401. verbose_name_plural = verbose_name
  402. class Product(models.Model):
  403. '''
  404. 产品表
  405. '''
  406. #标题最大长度255,不能重名
  407. title = models.CharField(u'产品标题',max_length=255,unique=True)
  408. #产品简介
  409. intro = models.CharField(u'生产企业',max_length=255,unique=True)
  410. #上传文件
  411. head_img = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  412. content = RichTextUploadingField('正文')
  413. mobile = models.CharField(u'联系方式', max_length=20, blank=True, null=True)
  414. #发布用户
  415. author = models.ForeignKey(MyUser,verbose_name="作者")
  416. #发布日期
  417. publish_date = models.DateTimeField(default=timezone.now, verbose_name='发布日期', help_text="发布日期")
  418. #是否隐藏
  419. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  420. #帖子的优先级
  421. priority = models.IntegerField(default=1000,verbose_name="优先级")
  422. # def __unicode__(self):
  423. # return "<%s,author:%s>" % (self.title,self.author)
  424. def __str__(self):
  425. return self.title
  426. class Meta:
  427. verbose_name = '产品简介'
  428. verbose_name_plural = verbose_name
  429. # 博客模型
  430. class Blog(models.Model):
  431. title = models.CharField(max_length=254, unique=True)
  432. # 博客的内容为 RichTextField 对象
  433. body = RichTextField()
  434. def __str__(self):
  435. return self.title
  436. class CKArticle(models.Model):
  437. author = models.ForeignKey(MyUser,verbose_name=u'作者',blank=True, null=True)
  438. art_type = models.CharField(u'文章类型',max_length=10, blank=True, null=True) # 5 新闻资讯 6 视频资讯 7 产品展厅 8 四季采摘 9 民宿导览 10 旅游景点 11 个人农场
  439. writer = models.CharField(u'发布人', max_length=10, blank=True, null=True)
  440. title = models.CharField(u'标题',max_length=254, null=True, blank=True)
  441. video_url = models.FileField(upload_to="media/uploads/", null=True, blank=True, verbose_name="视频内容")
  442. intro = models.CharField(u'简介',max_length=255, null=True, blank=True)
  443. head_img = models.ImageField(u'封面图片',upload_to="media/uploads/" ,null=True, blank=True)
  444. content = RichTextUploadingField(u'正文', null=True, blank=True)
  445. #是否隐藏
  446. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  447. upl_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  448. def __str__(self):
  449. return self.title
  450. # # 园区管理者
  451. # class GardenUser(models.Model):
  452. # # 园区管理人员
  453. # username = models.CharField(u'名字', max_length=20, blank=True, null=True)
  454. # # 人员电话
  455. # mobile = models.CharField(u'电话', max_length=20, blank=True, null=True)
  456. # gender = models.CharField(u'性别', max_length=5, blank=True, null=True)
  457. # class Meta:
  458. # verbose_name = '园区管理者'
  459. # verbose_name_plural = verbose_name
  460. # def __str__(self):
  461. # return self.username
  462. # 园区表
  463. class GardenManage(models.Model):
  464. name = models.CharField(u'园区名称', max_length=20, blank=True, null=True)
  465. addr = models.CharField(u'园区地址', max_length=20, blank=True, null=True)
  466. area = models.CharField(u'园区面积', max_length=20, blank=True, null=True)
  467. # user = models.ForeignKey(GardenUser,blank=True, null=True,verbose_name=u'园区管理者')
  468. crop = models.CharField(u'园区作物', max_length=20, blank=True, null=True)
  469. class Meta:
  470. verbose_name = '园区表'
  471. verbose_name_plural = verbose_name
  472. def __str__(self):
  473. return self.name
  474. # 园区分地表
  475. class GardenArea(models.Model):
  476. name = models.CharField(u'地块名称', max_length=20, blank=True, null=True)
  477. user = models.ForeignKey(MyUser,blank=True, null=True,verbose_name=u'所属用户')
  478. manage = models.CharField(u'负责人', max_length=20, blank=True, null=True)
  479. garden = models.ForeignKey(GardenManage,blank=True, null=True,verbose_name=u'所属园区')
  480. location = models.CharField(u'地块坐标', max_length=100, blank=True, null=True)
  481. location_2 = models.CharField(u'地块坐标2', max_length=100, blank=True, null=True)
  482. area = models.CharField('地块面积', max_length=50, blank=True, null=True)
  483. mobile = models.CharField(u'电话', max_length=20, blank=True, null=True)
  484. img = models.CharField(u'地块图片', max_length=200, blank=True, null=True)
  485. img_1 = models.CharField(u'地块图片', max_length=200, blank=True, null=True)
  486. addr = models.CharField(u'地块地址',max_length=255, null=True, blank=True)
  487. desc = models.CharField(u'地块介绍', max_length=350, blank=True,null=True)
  488. guide_img = models.CharField(u'导览图片', max_length=200, blank=True, null=True)
  489. upl_time = models.DateTimeField(u'创建时间', blank=True, null=True)
  490. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  491. class Meta:
  492. verbose_name = '园区分地表'
  493. verbose_name_plural = verbose_name
  494. def __str__(self):
  495. return self.name
  496. # 农场管理者
  497. class FarmUser(models.Model):
  498. name = models.CharField(u'人员名字', max_length=20, blank=True, null=True)
  499. gender = models.CharField(u'性别', max_length=20, blank=True, null=True)
  500. mobile = models.CharField(u'联系方式', max_length=20, blank=True, null=True)
  501. upl_time = models.DateTimeField(u'创建时间', blank=True, null=True)
  502. class Meta:
  503. verbose_name = '农场管理者'
  504. verbose_name_plural = verbose_name
  505. def __str__(self):
  506. return self.name
  507. # 农场表
  508. class FarmList(models.Model):
  509. name = models.CharField(u'农场名称', max_length=20, blank=True, null=True)
  510. user = models.ForeignKey(MyUser,blank=True, null=True,verbose_name=u'所属用户')
  511. manage_user = models.ForeignKey(FarmUser,blank=True, null=True,verbose_name=u'农场负责人')
  512. garden = models.ForeignKey(GardenArea,blank=True, null=True,verbose_name=u'所属地块')
  513. area = models.CharField('农场面积', max_length=50, blank=True, null=True)
  514. curr_var = models.CharField('当前品种', max_length=50, blank=True, null=True)
  515. farm_img = models.CharField(u'农场图片', max_length=200, blank=True, null=True)
  516. addr = models.CharField(u'农场地址',max_length=255, null=True, blank=True)
  517. location = models.CharField(u'经纬度', max_length=50, blank=True, null=True)
  518. farm_desc = models.CharField(u'农场介绍', max_length=50, blank=True,null=True)
  519. upl_time = models.DateTimeField(u'创建时间', blank=True, null=True)
  520. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  521. class Meta:
  522. verbose_name = '农场表'
  523. verbose_name_plural = verbose_name
  524. def __str__(self):
  525. return self.name
  526. # 采摘发布
  527. class Pick_Pub(models.Model):
  528. farm = models.ForeignKey(FarmList, blank=True, null=True, verbose_name=u'所属农场',related_name='farms')
  529. pick_s = models.CharField(u'采摘开始', max_length=20, blank=True, null=True)
  530. pick_e = models.CharField(u'采摘结束',max_length=20, blank=True, null=True)
  531. name = models.CharField(u'采摘名称', max_length=20, blank=True, null=True)
  532. addr = models.CharField(u'种植地址', max_length=20, blank=True, null=True)
  533. scale = models.CharField(u'种植规模', max_length=20, blank=True, null=True)
  534. ripe_time = models.CharField(u'成熟日期',max_length=20, blank=True, null=True)
  535. company = models.CharField(u'采摘企业', max_length=20, blank=True, null=True)
  536. pick_img = models.CharField(u'农场图片', max_length=200, blank=True, null=True)
  537. upl_time = models.CharField(u'采摘时间', max_length=200,blank=True, null=True)
  538. content = RichTextUploadingField('详细介绍',null=True, blank=True)
  539. pub_time = models.DateTimeField(u'数据上传时间', default=timezone.now)
  540. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  541. class Meta:
  542. verbose_name = '采摘发布'
  543. verbose_name_plural = verbose_name
  544. def __str__(self):
  545. return self.name
  546. # 个人采摘
  547. class Person_Pick(models.Model):
  548. farm = models.ForeignKey(FarmList, blank=True, null=True, verbose_name=u'所属农场',related_name='farms2')
  549. name = models.CharField(u'采摘人员', max_length=20, blank=True, null=True)
  550. var = models.CharField(u'品种', max_length=20, blank=True, null=True)
  551. num = models.CharField(u'数量', max_length=20, blank=True, null=True)
  552. upl_time = models.DateTimeField(u'采摘时间', blank=True, null=True)
  553. class Meta:
  554. verbose_name = '个人采摘'
  555. verbose_name_plural = verbose_name
  556. def __str__(self):
  557. return self.name
  558. # 销售管理
  559. class Sell_Manage(models.Model):
  560. farm = models.ForeignKey(FarmList, blank=True, null=True, verbose_name=u'所属农场',related_name='farms1')
  561. name = models.CharField(u'客户名称', max_length=20, blank=True, null=True)
  562. num = models.CharField(u'数量', max_length=20, blank=True, null=True)
  563. money = models.CharField(u'金额', max_length=20, blank=True, null=True)
  564. upl_time = models.DateTimeField(u'创建时间', blank=True, null=True)
  565. sell_img = models.CharField(u'销售图片', max_length=200, blank=True, null=True)
  566. class Meta:
  567. verbose_name = '销售管理'
  568. verbose_name_plural = verbose_name
  569. def __str__(self):
  570. return self.name
  571. # 库存管理
  572. class Store_Manage(models.Model):
  573. name = models.CharField(u'物料名称', max_length=20, blank=True, null=True)
  574. rtype = models.CharField(u'物料类别', max_length=20, blank=True, null=True)
  575. spec = models.CharField(u'规格', max_length=20, blank=True, null=True)
  576. rese = models.CharField(u'库存', max_length=20, blank=True, null=True)
  577. graden = models.ForeignKey(GardenArea,blank=True, null=True,verbose_name=u'所属农场')
  578. upl_time = models.DateTimeField(u'创建时间', blank=True, null=True)
  579. class Meta:
  580. verbose_name = '地块库存表'
  581. verbose_name_plural = verbose_name
  582. def __str__(self):
  583. return self.name
  584. # 区域种植统计
  585. class Areacrop(models.Model):
  586. cropname = models.CharField(u'作物名称', max_length=20, blank=True, null=True)
  587. area = models.ForeignKey(FarmList,blank=True, null=True,verbose_name=u'所属地块')
  588. crop_count = models.CharField(u'作物数量', max_length=20, blank=True, null=True)
  589. upl_time = models.DateTimeField(u'种植时间', blank=True, null=True)
  590. end_time = models.DateTimeField(u'结束时间', blank=True, null=True)
  591. crop_img = models.CharField(u'作物图片', max_length=200, blank=True, null=True)
  592. class Meta:
  593. verbose_name = '区域作物表'
  594. verbose_name_plural = verbose_name
  595. def __str__(self):
  596. return self.cropname
  597. # 气象站预警记录表
  598. class Warning_His(models.Model):
  599. equip_id = models.CharField(u'设备ID', max_length=20, blank=True, null=True)
  600. warning_info = models.CharField(u'预警说明', max_length=20, blank=True, null=True)
  601. warning_data = models.CharField(u'预警记录', max_length=20, blank=True, null=True)
  602. upl_time = models.DateTimeField(u'预警时间', blank=True, null=True)
  603. class Meta:
  604. verbose_name = '气象站预警记录表'
  605. verbose_name_plural = verbose_name
  606. def __str__(self):
  607. return self.equip_id
  608. # 民宿表
  609. class Hotel_Info(models.Model):
  610. name = models.CharField(u'民宿名字', max_length=200, blank=True, null=True)
  611. price = models.CharField(u'民宿价格', max_length=20, blank=True, null=True)
  612. intro = models.CharField(u'民宿简介',max_length=255, null=True, blank=True)
  613. addr = models.CharField(u'民宿地址',max_length=255, null=True, blank=True)
  614. location = models.CharField(u'经纬度', max_length=50, blank=True, null=True)
  615. person = models.CharField(u'法人代表',max_length=255, null=True, blank=True)
  616. hotel_img = models.CharField(u'民宿封面', max_length=200, blank=True, null=True)
  617. hotel_tel = models.CharField(u'联系方式', max_length=20, blank=True, null=True)
  618. upl_time = models.DateTimeField(u'发布时间',default=timezone.now)
  619. # 是否隐藏
  620. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  621. # 发布用户
  622. author = models.ForeignKey(MyUser,verbose_name="作者")
  623. content = RichTextUploadingField('民宿详情',null=True, blank=True)
  624. class Meta:
  625. verbose_name = '民宿表'
  626. verbose_name_plural = verbose_name
  627. def __str__(self):
  628. return self.name
  629. # 旅游信息表
  630. class Sightsee_Info(models.Model):
  631. name = models.CharField(u'景点名字', max_length=20, blank=True, null=True)
  632. price = models.CharField(u'景点价格', max_length=20, blank=True, null=True)
  633. desc = models.CharField(u'景点简介',max_length=255, null=True, blank=True)
  634. location = models.CharField(u'经纬度', max_length=50, blank=True, null=True)
  635. addr = models.CharField(u'景点位置', max_length=50, blank=True, null=True)
  636. sightsee_stime = models.CharField(u'景区开放时间', max_length=50, blank=True, null=True)
  637. sightsee_etime = models.CharField(u'景区结束时间', max_length=50, blank=True, null=True)
  638. sightsee_img = models.CharField(u'景点图片', max_length=200, blank=True, null=True)
  639. sightsee_tel = models.CharField(u'联系方式', max_length=20, blank=True, null=True)
  640. upl_time = models.DateTimeField(u'发布时间',default=timezone.now)
  641. guide_img = models.CharField(u'导览图片', max_length=200, blank=True, null=True)
  642. # 是否隐藏
  643. hidden = models.BooleanField(default=False,verbose_name="是否隐藏")
  644. # 发布用户
  645. author = models.ForeignKey(MyUser,verbose_name="作者", blank=True, null=True)
  646. content = RichTextUploadingField('景点详情',null=True, blank=True)
  647. class Meta:
  648. verbose_name = '景点信息表'
  649. verbose_name_plural = verbose_name
  650. def __str__(self):
  651. return self.name
  652. # 民宿照片表
  653. class Hotel_Photo(models.Model):
  654. hotel = models.ForeignKey(Hotel_Info, blank=True, null=True, verbose_name=u'所属民宿')
  655. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  656. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  657. def __str__(self):
  658. return self.addr
  659. class Meta:
  660. verbose_name = u'民宿照片表'
  661. verbose_name_plural = verbose_name
  662. ordering = ['-upl_time']
  663. get_latest_by = 'upl_time'
  664. # 图片信息表
  665. class Pic_Info(models.Model):
  666. pic_user = models.ForeignKey(MyUser, blank=True, null=True, verbose_name=u'图片用户')
  667. locat1 = models.CharField(u'图片东北点', max_length=50, blank=True, null=True)
  668. locat2 = models.CharField(u'图片西南点', max_length=50, blank=True, null=True)
  669. pic_center = models.CharField(u'图片中心点', max_length=50, blank=True, null=True)
  670. addr = models.CharField(u'照片路径', max_length=200, blank=True, null=True)
  671. locat_info = models.CharField(u'图片框格信息', max_length=300, blank=True, null=True)
  672. upl_time = models.DateTimeField(u'上传时间', default=timezone.now)
  673. def __str__(self):
  674. return self.addr
  675. class Meta:
  676. verbose_name = u'图片信息表'
  677. verbose_name_plural = verbose_name
  678. ordering = ['-upl_time']
  679. get_latest_by = 'upl_time'
  680. # 气象站短信预警记录
  681. class QXZ_Alarm_Log(models.Model):
  682. equip_id = models.ForeignKey(Equip)
  683. logs = models.CharField(u'预警记录',max_length=20, blank=True, null=True)
  684. ekey = models.CharField(u'监测指标',max_length=20, blank=True, null=True)
  685. # info = models.CharField(u'内容',max_length=20, blank=True)
  686. upl_time = models.DateTimeField(u'上报时间', default=timezone.now)
  687. class Meta:
  688. verbose_name = u'气象站短信预警记录'
  689. verbose_name_plural = verbose_name
  690. ordering = ['-upl_time']
  691. get_latest_by = 'upl_time'
  692. # 专家数据表
  693. class Experts(models.Model):
  694. name = models.CharField(u'专家名字',max_length=20, blank=True, null=True)
  695. relation = models.CharField(u'联系方式',max_length=20, blank=True, null=True)
  696. desc = models.CharField(u'专家描述',max_length=50, blank=True, null=True)
  697. pic = models.CharField(u'专家图片',max_length=200, blank=True, null=True)
  698. upl_time = models.DateTimeField(u'创建时间', default=timezone.now)
  699. class Meta:
  700. verbose_name = u'专家数据表'
  701. verbose_name_plural = verbose_name
  702. ordering = ['-upl_time']
  703. get_latest_by = 'upl_time'
  704. # 合作伙伴
  705. class Relations(models.Model):
  706. name = models.CharField(u'单位名字',max_length=20, blank=True, null=True)
  707. relation = models.CharField(u'单位链接',max_length=20, blank=True, null=True)
  708. desc = models.CharField(u'单位描述',max_length=50, blank=True, null=True)
  709. pic = models.CharField(u'单位图片',max_length=200, blank=True, null=True)
  710. upl_time = models.DateTimeField(u'创建时间', default=timezone.now)
  711. class Meta:
  712. verbose_name = u'合作伙伴表'
  713. verbose_name_plural = verbose_name
  714. ordering = ['-upl_time']
  715. get_latest_by = 'upl_time'
  716. # 轮播图和广告图
  717. class SystemPhoto(models.Model):
  718. name = models.CharField(u'图片名称', max_length=20, blank=True, null=True)
  719. pic_1 = models.CharField(u'轮播图', max_length=100, blank=True, null=True)
  720. pic_2 = models.CharField(u'广告图', max_length=100, blank=True, null=True)
  721. upl_time = models.DateTimeField(u'创建时间', default=timezone.now)
  722. class Meta:
  723. verbose_name = '轮播图和广告图'
  724. verbose_name_plural = verbose_name
  725. def __str__(self):
  726. return self.name