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' что бы создать связи. Это если совсем коротко :)

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