Как колонки связаны в posgresql и данные автоматически заполняются между таблицами?

У меня есть таблицы, которые я создал через models.py в Django models и подключил их к postgresql db. У меня есть общие колонки в двух таблицах Departments(DepartmentName) и Employees (Department) и, скажем, мы хотим добавить новую строку в Employees таблицу.

Меня смущает то, что поскольку эти два столбца DepartmentName и Department одинаковы, как мы можем убедиться, что при генерации новых записей в таблице Employees происходит их автоматическое заполнение в таблице Departments?

"models.py"

from django.db import models

# Create your models here.

class Departments(models.Model):
    DepartmentId = models.AutoField(primary_key = True) # Autoincremented department id
    DepartmentName = models.CharField(max_length = 500)


class Employees(models.Model):
    EmployeeId = models.AutoField(primary_key = True) # Autoincremented department id
    EmployeeName = models.CharField(max_length = 500)
    Department = models.CharField(max_length = 500)
    DateofJoining = models.DateField()
    PhotoFileName = models.CharField(max_length = 500)

После вставки новых записей в таблицу Employees в таблице postgresql

insert into public"Employees" values (1, 'Bob', 'IT', '2021-12-12', 'anonyms.png')

enter image description here

Таблица Департаменты в когда мы вставляли новые записи в

enter image description here

Итак, мои вопросы следующие Как мы можем связать эти две таблицы, когда новые записи создаются в одной из них, другая заполняется данными? В данном случае DepartmentName данные в Departments таблице.

  1. Ваши модели не похожи ни на django, ни на python, поэтому я бы переписал их. Имя модели должно быть единственным, не используйте camelCase, не дублируйте имя модели в именах полей.
  2. .
  3. Чтобы решить вашу проблему, я бы переопределил save() метод в Employee модели.
class Department(models.Model):
    name = models.CharField(max_length=500)


class Employee(models.Model):
    name = models.CharField(max_length=500)
    department = models.CharField(max_length=500)
    date_of_joined = models.DateField()
    photo_file_name = models.CharField(max_length=500)

   def save(self, **kwargs):
       Department.objects.get_or_create(name=self.department)
       super().save(**kwargs)
       

Кстати, используйте ForeignKey в модели Employee для поля department.

Вернуться на верх