Django来自同一模型的两个ForeignKey

时间:2019-03-19 23:01:38

标签: python django python-3.x django-models

Pegawai模型中,我需要两个ForeignKey

  1. Jabatan模型
  2. unit_kerja模型的
  3. 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 个答案:

答案 0 :(得分:2)

没有诸如字段外键之类的东西,但是无论如何您都不需要它。您始终可以使用多次遍历来访问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

然后简单地使用

{{1}}