ฉันเพิ่งเรียนรู้ Django ดังนั้นฉันจึงคิดที่จะสร้างโปรเจ็กต์ที่เรียกว่า job board เพื่อทำความเข้าใจในรายละเอียดมากขึ้น ฉันได้วาดกรณีการใช้งานต่อไปนี้
- ผู้คนสามารถลงทะเบียนเป็นผู้หางาน สร้างโปรไฟล์ และหางานที่ตรงกับทักษะของตนเอง
- บริษัทสามารถลงทะเบียน ลงประกาศงานได้
- ตัวแทนหลายคนจากบริษัทหนึ่งควรจะสามารถลงทะเบียนและลงประกาศงานได้
- ผู้สรรหาอิสระสามารถสร้างบัญชีได้เช่นกัน
- บริษัทสามารถติดต่อกับผู้สรรหาอิสระรายนั้นได้
การออกแบบโมเดลสำหรับกรณีการใช้งานดังกล่าวจะเป็นอย่างไร ฉันสับสนกับผู้ใช้หลายประเภทใน Django ข้อดีบางประการในการสร้างโปรไฟล์ผู้ใช้ ในขณะที่ข้อดีบางประการในการใช้ Groups
สำหรับตอนนี้ฉันทำได้เพียงสิ่งต่อไปนี้เท่านั้น
class User(AbstractUser):
'''
Abstract user because django recommends to start with custom user
'''
username = None
email = models.EmailField(_("Email Address"), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class Company(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ฉันสามารถสร้างแบบจำลองสำหรับผู้ใช้และบริษัทได้ แต่ฉันไม่รู้ว่าจะจัดการกับผู้ใช้หลายประเภท เช่น ผู้ใช้สามารถเป็นผู้หางานหรือผู้สรรหาก็ได้ นอกจากนี้ ตัวแทนหลายคนจากบริษัทหนึ่งควรจะสามารถลงทะเบียนและลงประกาศงานได้ รวมทั้งสามารถมีผู้สรรหาอิสระได้เช่นกัน คุณจะจัดการกับกรณีดังกล่าวอย่างไรหากจำเป็น? ใครสามารถช่วยฉันในคำแนะนำทีละขั้นตอนโปรด? วิธีนี้จะช่วยขจัดความสับสนของฉันและจะช่วยฉันในการออกแบบตารางได้ดีขึ้นในอนาคต
อัปเดตพร้อมตัวอย่างโดยสรุป
class User(models.Model):
'''
User can be of any 3 types or can have multiple role as well
'''
is_job_seeker = models.BooleanField(default=False)
is_recruiter = models.BooleanField(default=False)
is_mentor = models.BooleanField(default=False)
class Company(models.Model):
user = models.ForeignKey(User) # only user with is_recruiter flag active can be
class JobSeeker(models.Model):
user = models.OneToOneField(User)
# job seeker profile related fields like experiences, skills, education, profile image etc
class Recruiter(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.ForeignKey(Company, null=True, blank=True)
# recruiter related profile
def is_job_seeker(self): try: user.jobseeker; except JobSeeker.DoesNotExist: return False; else: return True
วิธีนี้ได้รับการปรับปรุงความสอดคล้องเนื่องจากมีแหล่งความจริงแหล่งเดียว (แต่ประสิทธิภาพจะลดลงเมื่อมีการค้นหาฐานข้อมูล ซึ่งสามารถแก้ไขได้โดยใช้คุณสมบัติแคชซึ่งเป็นเวิร์มกระป๋องของตัวเอง :)) แต่มันก็เป็นแค่เรื่องไร้สาระ - person Tomasz Zieliński   schedule 10.06.2019