Saya memiliki model pengguna menggunakan kelas AbstractBaseUser. Saya mendaftarkan pengguna menggunakan email, nama pengguna dan kata sandi. Kelas pengguna:

class User(AbstractBaseUser):
    """
    Creates a customized database table for user
    """
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    username = models.CharField(max_length=255, unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email',]

    objects = UserManager()

    def get_full_name(self):
        # The user is identified by their email address
        return self.email

    def get_short_name(self):
        # The user is identified by their email address
        return self.email

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

Saya ingin memperluas model ini ke model lain yang disebut Karyawan. Untuk memperluas model pengguna ke model karyawan, saya telah menggunakan kelas sinyal Django. Kelas karyawan:

class Employee(models.Model):
    """
    Create employee attributes
    """
    employee_user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True)
    e_id = models.IntegerField(unique=True, null=True, blank=True)
    first_name = models.CharField(max_length=128,blank=True)
    last_name = models.CharField(max_length=128, blank=True)
    address = models.CharField(max_length=256, blank=True)
    phone_number = models.CharField(max_length=128, blank=True)
    email = models.EmailField(max_length=128, unique=True)
    
    @receiver(post_save, sender=User)
    def create_or_update_user_profile(sender, instance, created, **kwargs):
        if created:
            Employee.objects.create(employee_user=instance)
        instance.Employee.save()

Pada model ini juga terdapat field bernama email. Saya harus menyimpan bidang ini karena saya menggunakan model ini untuk membuat formulir untuk pembuatan Karyawan. Tapi masalahnya, kolom email model pengguna bertentangan dengan kolom email karyawan. Saya harus menyimpan kedua bidang email.

Bisakah saya memperbarui bidang email karyawan dengan bidang email pengguna?? Jika ya, lalu apa yang harus menjadi pertanyaan???

-1
user13848055 2 Juli 2020, 16:29

1 menjawab

Jawaban Terbaik

Anda dapat melakukan Employee.objects.create(employee_user=instance, email=instance.email), tetapi Anda harus mengevaluasi apakah Anda perlu mengulang data dalam dua tabel. Anda selalu dapat mengakses employee.employee_user.email setiap kali Anda memiliki instance Karyawan.

1
HuLu ViCa 2 Juli 2020, 14:14