models.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from django.db import models
  2. from django.utils import timezone
  3. from datetime import datetime
  4. from django.db.models.signals import post_init,post_save
  5. from django.dispatch import receiver
  6. from django.core.mail import send_mail
  7. import os
  8. from docxtpl import DocxTemplate
  9. from docxtpl import InlineImage
  10. from docx.shared import Mm, Inches, Pt
  11. # Create your models here.
  12. class Ad(models.Model):
  13. title = models.CharField(max_length = 50, verbose_name = '招聘岗位')
  14. description = models.TextField(verbose_name = '岗位要求')
  15. publishDate = models.DateTimeField(max_length = 20,
  16. default = timezone.now,
  17. verbose_name = '发布时间')
  18. def __str__(self):
  19. return self.title
  20. class Meta:
  21. verbose_name = '招聘广告'
  22. verbose_name_plural = '招聘广告'
  23. ordering = ('-publishDate',)
  24. class Resume(models.Model):
  25. name = models.CharField(max_length=20, verbose_name='姓名')
  26. personID = models.CharField(max_length=30, verbose_name='身份证号')
  27. sex = models.CharField(max_length=5, default='男', verbose_name='性别')
  28. email = models.EmailField(max_length=30, verbose_name='邮箱')
  29. birth = models.DateField(max_length=20,
  30. default=datetime.strftime(datetime.now(),
  31. "%Y-%m-%d"),
  32. verbose_name='出生日期')
  33. edu = models.CharField(max_length=5, default='本科', verbose_name='学历')
  34. school = models.CharField(max_length=40, verbose_name='毕业院校')
  35. major = models.CharField(max_length=40, verbose_name='专业')
  36. position = models.CharField(max_length=40, verbose_name='申请职位')
  37. experience = models.TextField(blank=True,
  38. null=True,
  39. verbose_name='学习或工作经历')
  40. photo = models.ImageField(upload_to='contact/recruit/%Y_%m_%d',
  41. verbose_name='个人照片')
  42. grade_list = (
  43. (1, '未审'),
  44. (2, '通过'),
  45. (3, '未通过'),
  46. )
  47. status = models.IntegerField(choices=grade_list,
  48. default=1,
  49. verbose_name='面试成绩')
  50. publishDate = models.DateTimeField(max_length=20,
  51. default=timezone.now,
  52. verbose_name='提交时间')
  53. def __str__(self):
  54. return self.name
  55. class Meta:
  56. verbose_name = '简历'
  57. verbose_name_plural = '简历'
  58. ordering = ('-status', '-publishDate')
  59. @receiver(post_init,sender=Resume)
  60. def before_save_resume(sender, instance, **kwargs):
  61. instance.__original_status = instance.status
  62. @receiver(post_save, sender=Resume)
  63. def post_save_resume(sender, instance, **kwargs):
  64. email = instance.email
  65. EMAIL_FEOM = 'xxxxxxxx@qq.com'
  66. if instance.__original_status==1 and instance.status==2:
  67. template_path = os.getcwd() + '/media/recruit.docx'
  68. template = DocxTemplate(template_path)
  69. name = instance.name
  70. personID = instance.personID
  71. sex = instance.sex
  72. email = instance.email
  73. birth = instance.birth
  74. edu = instance.birth
  75. school = instance.school
  76. major = instance.major
  77. position = instance.position
  78. experience = instance.experience
  79. photo = instance.photo
  80. context = {
  81. 'name':name,
  82. 'personID':personID,
  83. 'sex':sex,
  84. 'email':email,
  85. 'birth':birth,
  86. 'edu':edu,
  87. 'school':school,
  88. 'major':major,
  89. 'position':position,
  90. 'experience':experience,
  91. 'photo':InlineImage(template,photo,width=Mm(30),height=Mm(40)),
  92. }
  93. template.render(context)
  94. filename = '%s/media/contact/recruit/%s_%d.docx'%(
  95. os.getcwd(),instance.name,instance.id
  96. )
  97. template.save(filename)
  98. # if instance.__original_status==1 and instance.status==2:
  99. # email_title = '通知:恒达科技招聘初试结果'
  100. # email_body = '恭喜您通过本企业初试'
  101. # send_status = send_mail(email_title,email_body,EMAIL_FEOM,[email])
  102. elif instance.__original_status==1 and instance.status==3:
  103. email_title = '通知:恒达科技招聘初试结果'
  104. email_body = '很遗憾,您未能通过本企业初试,感谢您的关注'
  105. send_status = send_mail(email_title,email_body,EMAIL_FEOM,[email])
  106. # print(instance.__original_status)
  107. # print(instance.status)