You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
4.6 KiB

4 years ago
from django.db import models
from django.utils import timezone
from datetime import datetime
from django.db.models.signals import post_init, post_save
from django.dispatch import receiver
from django.core.mail import send_mail
import os
from docxtpl import DocxTemplate
from docxtpl import InlineImage
from docx.shared import Mm, Inches, Pt
# Create your models here.
class Ad(models.Model):
title = models.CharField(max_length=50, verbose_name='招聘岗位')
description = models.TextField(verbose_name='岗位要求')
publishDate = models.DateTimeField(max_length=20,
default=timezone.now,
verbose_name='发布时间')
def __str__(self):
return self.title
class Meta:
verbose_name = '招聘广告'
verbose_name_plural = '招聘广告'
ordering = ('-publishDate', )
class Resume(models.Model):
name = models.CharField(max_length=20, verbose_name='姓名')
personID = models.CharField(max_length=30, verbose_name='身份证号')
sex = models.CharField(max_length=5, default='', verbose_name='性别')
email = models.EmailField(max_length=30, verbose_name='邮箱')
birth = models.DateField(max_length=20,
default=datetime.strftime(datetime.now(),
"%Y-%m-%d"),
verbose_name='出生日期')
edu = models.CharField(max_length=5, default='本科', verbose_name='学历')
school = models.CharField(max_length=40, verbose_name='毕业院校')
major = models.CharField(max_length=40, verbose_name='专业')
position = models.CharField(max_length=40, verbose_name='申请职位')
experience = models.TextField(blank=True,
null=True,
verbose_name='学习或工作经历')
photo = models.ImageField(upload_to='contact/recruit/%Y_%m_%d',
verbose_name='个人照片')
grade_list = (
(1, '未审'),
(2, '通过'),
(3, '未通过'),
)
status = models.IntegerField(choices=grade_list,
default=1,
verbose_name='面试成绩')
publishDate = models.DateTimeField(max_length=20,
default=timezone.now,
verbose_name='提交时间')
def __str__(self):
return self.name
class Meta:
verbose_name = '简历'
verbose_name_plural = '简历'
ordering = ('-status', '-publishDate')
@receiver(post_init, sender=Resume)
def before_save_resume(sender, instance, **kwargs):
instance.__original_status = instance.status
@receiver(post_save, sender=Resume)
def post_save_resume(sender, instance, **kwargs):
email = instance.email # 应聘者邮箱
EMAIL_FROM = '1049453191@qq.com' # 企业QQ邮箱
if instance.__original_status == 1 and instance.status == 2:
email_title = '通知:桂电科技招聘初试结果'
email_body = '恭喜您通过本企业初试.'
send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
template_path = os.getcwd() + '/media/contact/recruit.docx' #模板文件
template = DocxTemplate(template_path)
# 从instance实例中获取当前简历字段信息
name = instance.name
personID = instance.personID
sex = instance.sex
email = instance.email
birth = instance.birth
edu = instance.edu
school = instance.school
major = instance.major
position = instance.position
experience = instance.experience
photo = instance.photo
context = {
'name': name,
'personID': personID,
'sex': sex,
'email': email,
'birth': birth,
'edu': edu,
'school': school,
'major': major,
'position': position,
'experience': experience,
'photo': InlineImage(template, photo, width=Mm(30), height=Mm(40)),
}
template.render(context)
filename = '%s/media/contact/recruit/%s_%d.docx' % (
os.getcwd(), instance.name, instance.id)
template.save(filename)
elif instance.__original_status == 1 and instance.status == 3:
email_title = '通知:桂电科技招聘初试结果'
email_body = '很遗憾,您未能通过本企业初试,感谢您的关注.'
send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])