Джанго два ForeignKey от той же модели - PullRequest
1 голос
/ 20 марта 2019

В Pegawai модели, мне нужно два ForeignKey s для:

  1. Jabatan модель
  2. unit_kerja поле Jabatan модель

Как применить их для моей Pegawai модели?Работал только первый.

Вот мой models.py:

from django.db import models
from django.urls import reverse
# Create your models here.
class UnitKerja(models.Model):
    nama_unit_kerja     = models.CharField(max_length=100)
    def get_absolute_url(self):
        return reverse("users:unitkerja")

    def __str__(self):
        return self.nama_unit_kerja

class Jabatan(models.Model):
    nama_jabatan        = models.CharField(max_length=100)
    level_jabatan       = models.IntegerField()
    unit_kerja          = models.ForeignKey(UnitKerja, on_delete=models.CASCADE, blank=True, null=True)

    def get_absolute_url(self):
        return reverse("users:jabatan")

    def __str__(self):
        return self.nama_jabatan

class Pegawai(models.Model):
        nip                 = models.CharField(max_length=100, unique=True)
        nama_pegawai        = models.CharField(max_length=100)
        alamat              = models.CharField(max_length=255)
        jabatan             = models.ForeignKey(Jabatan, on_delete=models.CASCADE)
        #this line#    
        unit_kerja          = models.ForeignKey(Jabatan.unit_kerja, on_delete=models.CASCADE, blank=True, null=True)

    def get_absolute_url(self):
        return reverse("users:pegawai")

    def __str__(self):
        return self.pegawai

1 Ответ

2 голосов
/ 20 марта 2019

Внешнего ключа для поля не существует, но он вам все равно не нужен.Вы всегда можете получить доступ к экземпляру UnitKerja с помощью многократного обхода, например:

my_unit_kerja = my_pegawai.jabatan.unit_kerja

, или у вас может быть свойство помощника, если приведенное выше слишком много работы:

class Pegawai(models.Model):
    ...
    @property
    def unit_kerja(self):
        return self.jabatan.unit_kerja

а затем просто используйте

my_pegawai.unit_kerja
...