Ну, вы на самом деле не можете удалить первичный ключ из ваших таблиц.
Таблицы индексируются по их идентификаторам строк. Это означает, что если вы удалите строку, идентификатор этой строки будет недоступен для использования в дальнейшем. В противном случае каждый раз, когда строка удаляется, таблицу дырок необходимо переиндексировать, что отнимает много времени и ресурсов, учитывая количество строк в вашей таблице.
Но ты все равно можешь это сделать.
Это делается так, что вам нужно сделать еще один столбец в качестве дополнительного столбца id и индексировать таблицу с ним.
Также вы должны изменить все идентификаторы после удаления строки.
Я настоятельно рекомендую вам не делать этого, потому что я не понимаю, как вы можете извлечь выгоду из такой архитектуры для вашей базы данных.
А для удаления файла при удалении строки:
@receiver(pre_delete, sender=YourModel)
def file_delete(sender, instance, **kwargs):
if instance.YOUR_FILE_FIELD_NAME:
instance.YOUR_FILE_FIELD_NAME.delete()
Он удалит сохраненный файл каждый раз, когда вы удаляете строку из любого места.
Или вот так:
os.remove('file/path')