django - 如何在 FileField django 中删除 PK 和文件?
问题描述
我有modelform
一个FileField
,所以我只是为我的数据库添加了一些带有一些描述的文件。它在我定义的位置添加一个文件,MEDIA_ROOT
并为每个项目添加一个 PK。例如,考虑我添加 5 个对象和 5 个文件。
我的问题是当我从shell或admin中删除所有5个对象时,相应的文件和PK不会被删除,而当我添加另一个对象时,PK从6开始。我怎样才能完全删除一个对象及其对应文件和 PK 并对其他对象进行排序,例如,如果我删除第 3 个对象,我希望第 4 个和第 5 个对象成为第 3 个和第 4 个。
解决方案
好吧,您实际上不能从表中删除主键。表由它们的行 ID 索引。这意味着如果您删除一行,该行的 id 以后将无法使用。否则,每次删除一行时,都应该重新索引孔表,考虑到表中有多少行,这会花费大量时间和资源。
但无论如何你都可以做到。它的完成方式是您必须将另一列作为额外的 id 列并用它来索引表。此外,您必须在删除一行后更改所有 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')
推荐阅读
- r - r 中 WDI、wb_stats SP.POP.TOTL 指标的问题
- python-3.x - 如何使用python将iso 8859-1转换为简单字母
- logging - 多个文件的日志级别上的 Serilog.Expressions SubLogger
- mql5 - 如何在 MQL5 中进行日期时间运算?
- excel - 如何在表格中查找每个字符串并仅显示一次?
- r - 解释 catnetwork 对象的“catnet”包的 cnProb 输出
- java - Spring JpaSpecificationExecutor 在第一次查询中太慢了
- apache-spark - Hyperopt spark 3.0 问题
- node.js - 从我的 ejs 文件中收到错误“无法读取未定义的属性‘用户名’”
- python - 如何解析 div 内的 HTML 表而不是 Python 中的表