首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在FileField django中删除PK和文件?

如何在FileField django中删除PK和文件?
EN

Stack Overflow用户
提问于 2018-07-06 02:30:51
回答 1查看 219关注 0票数 0

我有一个带有FileFieldmodelform,所以我只需要为我的数据库添加一些带有一些描述的文件。它会在我在MEDIA_ROOT中定义的位置添加一个文件,并为每个项目添加一个PK。例如,假设我添加了5个对象和5个文件。

我的问题是,当我从shell或admin中删除所有5个对象时,相应的文件和主键不会被删除,而当我添加另一个对象时,主键从6开始。我如何完全删除一个对象及其对应的文件和主键,并对其他对象进行排序,例如,如果我删除第三个对象,我希望第四个和第五个对象成为第三个和第四个对象。

EN

回答 1

Stack Overflow用户

发布于 2018-07-06 06:30:42

实际上,您不能从表中删除主键。表通过它们的行ids进行索引。这意味着如果您删除了一行,该行的id将无法在以后使用。否则,每次删除一行时,都应该重新索引孔表,考虑到表中有多少行,这会花费大量的时间和资源。

但不管怎样,你都可以做到。这样做的方法是,您必须创建另一列作为额外的id列,并使用它对表进行索引。此外,在删除行之后,您还必须更改所有ids。我强烈建议您不要这样做,因为我看不出您可以从这样的数据库架构中获益。

以及在删除行时删除文件:

代码语言:javascript
运行
复制
@receiver(pre_delete, sender=YourModel)
def file_delete(sender, instance, **kwargs):
    if instance.YOUR_FILE_FIELD_NAME: 
        instance.YOUR_FILE_FIELD_NAME.delete()

每当您从任何位置删除行时,它都会删除保存的文件。

或者这样:

代码语言:javascript
运行
复制
os.remove('file/path')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51197816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档