Как колонки связаны в 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')
Таблица Департаменты в когда мы вставляли новые записи в
Итак, мои вопросы следующие
Как мы можем связать эти две таблицы, когда новые записи создаются в одной из них, другая заполняется данными? В данном случае DepartmentName данные в Departments таблице.
- Ваши модели не похожи ни на django, ни на python, поэтому я бы переписал их. Имя модели должно быть единственным, не используйте camelCase, не дублируйте имя модели в именах полей. .
- Чтобы решить вашу проблему, я бы переопределил
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.

