Python/Django - множественный выбор для ForeingKey

Я разрабатываю модели для базы данных, которая будет состоять из нескольких приложений. Было решено добавить простую систему управления документами, чтобы позволить бесконечным документам быть прикрепленными к различным моделям.

Это решение, о котором я думал, но я не знаю, есть ли лучший способ сделать это.

Для простоты допустим 3 модели

models.py

class Contract(models.Model):
    ....

class Invoice(models.Model):
    ....

class Personal_record(models.Model):
    ....

Каждая модель может иметь несколько документов, связанных по усмотрению пользователя, например:

"Договор" может иметь 1 файл_договора.pdf и "n" поправок_к_договору.pdf "Счет-фактура" - единственная модель, которая теоретически может иметь один счет-фактуру.pdf на запись. "Личная_запись" - пользователь может прикрепить/загрузить любой файл по своему желанию, поэтому "n" записей.pdf

Решением, которое я придумал, является создание другой модели под названием Documents, которая будет хранить все документы, загруженные из любой формы загрузки.

Я бы перечислил все ссылки на другие модели и сделал их пустыми, и использовал бы простое if/else для определения типа обновления ForeignKey.

class Documents(models.Model):
    contract = models.ForeignKey(Contract, on_delete=models.CASCADE,blank=True, null=True)
    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE,blank=True, null=True)
    p_records = models.ForeignKey(Personal_record, on_delete=models.CASCADE,blank=True, null=True)
    ....

Есть ли лучший способ сделать это? Может быть, иметь только одно единственное поле экземпляра?

Заранее благодарю за любой вклад

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