Django, не понимаю как связать три таблицы моделей
У меня есть три таблицы
Первая таблица:
'''
class Person(models.Model):
first_name = models.CharField(max_length=150)
surname = models.CharField(max_length=150)
url = models.CharField(max_length=500)
location = models.CharField(max_length=150)
last_position = models.CharField(max_length=150)
'''
Вторая таблица:
'''
class Education(models.Model):
university = models.CharField(max_length=150)
degree = models.CharField(max_length=150)
info = models.CharField(max_length=150)
admission_date = models.DateField()
graduation_date = models.DateField()
'''
Третья таблица:
'''
class Experience(models.Model):
company = models.CharField(max_length=150)
position = models.CharField(max_length=150)
hiring_date = models.DateField()
fired_date = models.DateField()
job_location = models.CharField(max_length=150)
description = models.CharField(max_length=150)
person = models.ForeignKey(Person, on_delete=models.PROTECT)
'''
У каждого Person может быть несколько Education и Experience. Как мне правильно организовать взамоотношения таблиц? Я в тупике, пробовал через foreign_key, но выдавало ошибку об отсутсвии поля person_id, хотя оно должно создаватьсяя автоматически, наведите меня на верный путь, пожалуйста
class Person(models.Model):
first_name = models.CharField(max_length=150)
surname = models.CharField(max_length=150)
url = models.CharField(max_length=500)
location = models.CharField(max_length=150)
last_position = models.CharField(max_length=150)
class Education(models.Model):
person = models.ForeignKey('Person', on_delete=models.CASCADE) # тут связь на внешную таблицу
university = models.CharField(max_length=150)
degree = models.CharField(max_length=150)
info = models.CharField(max_length=150)
admission_date = models.DateField()
graduation_date = models.DateField()
class Experience(models.Model):
person = models.ForeignKey('Person', on_delete=models.CASCADE) # тут связь на внешную таблицу
company = models.CharField(max_length=150)
position = models.CharField(max_length=150)
hiring_date = models.DateField()
fired_date = models.DateField()
job_location = models.CharField(max_length=150)
description = models.CharField(max_length=150)
Таким образом можно связать ваши три таблицы. Что касается on_delete - в вашем случае наверное уместнее использовать CASCADE. Механика 'CASCADE' проста - удаляя Person удаляются связные Education и Experience
Ваша ошибка 'об отсутсвии поля person_id' связанна с тем что вы пытаетесь обратиться к объекту модели Person 'person = models.ForeignKey(Person, on_delete=models.PROTECT)' (и она должно уже существовать в бд). Если же вам нужно связать ForeignKey таблицы с нуля, надо обращаться к имени модели 'Person' что бы создать связи. Это если совсем коротко :)