Saya baru belajar Django jadi saya berpikir untuk membuat proyek yang disebut papan pekerjaan untuk memahami lebih detail. Saya telah menggambar kasus penggunaan berikut.
- Masyarakat dapat mendaftar sebagai pencari kerja, membangun profil mereka dan mencari pekerjaan yang sesuai dengan keahlian mereka
- Perusahaan dapat mendaftar, memposting pekerjaan.
- Beberapa perwakilan dari sebuah perusahaan harus dapat mendaftar dan memposting pekerjaan.
- Perekrut Independen juga dapat membuat akun.
- Perusahaan dapat menghubungi perekrut independen tersebut.
Bagaimana desain model untuk kasus penggunaan seperti itu? Saya bingung dengan banyak tipe pengguna di Django. Beberapa orang lebih suka membuat profil pengguna, sementara beberapa orang lebih suka menggunakan Grup.
Untuk saat ini, saya hanya dapat melakukan hal berikut
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)
Saya bisa membuat model untuk Pengguna dan Perusahaan. Tapi saya tidak tahu cara menangani banyak tipe pengguna seperti pengguna bisa menjadi pencari kerja atau perekrut. Selain itu, banyak perwakilan dari sebuah perusahaan harus bisa mendaftar dan memposting pekerjaan serta bisa ada perekrut independen juga. Bagaimana Anda menangani kasus seperti itu jika perlu? Adakah yang bisa membantu saya dalam panduan langkah demi langkah? Dengan cara ini kebingungan saya akan hilang dan akan membantu saya dalam mendesain tabel yang lebih baik di masa depan.
Perbarui dengan contoh singkatnya
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
. Dengan cara ini konsistensi ditingkatkan karena hanya ada satu sumber kebenaran (tetapi kinerjanya lebih rendah karena ada pencarian DB; hal ini dapat diatasi dengan menggunakan properti cache yang merupakan kaleng wormnya sendiri :)). Tapi itu hanya sebuah nit. - person Tomasz Zieliński   schedule 10.06.2019