我有一个带有FileField的modelform,所以我只需要为我的数据库添加一些带有一些描述的文件。它会在我在MEDIA_ROOT中定义的位置添加一个文件,并为每个项目添加一个PK。例如,假设我添加了5个对象和5个文件。
我的问题是,当我从shell或admin中删除所有5个对象时,相应的文件和主键不会被删除,而当我添加另一个对象时,主键从6开始。我如何完全删除一个对象及其对应的文件和主键,并对其他对象进行排序,例如,如果我删除第三个对象,我希望第四个和第五个对象成为第三个和第四个对象。
发布于 2018-07-06 06:30:42
实际上,您不能从表中删除主键。表通过它们的行ids进行索引。这意味着如果您删除了一行,该行的id将无法在以后使用。否则,每次删除一行时,都应该重新索引孔表,考虑到表中有多少行,这会花费大量的时间和资源。
但不管怎样,你都可以做到。这样做的方法是,您必须创建另一列作为额外的id列,并使用它对表进行索引。此外,在删除行之后,您还必须更改所有ids。我强烈建议您不要这样做,因为我看不出您可以从这样的数据库架构中获益。
以及在删除行时删除文件:
@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')https://stackoverflow.com/questions/51197816
复制相似问题