现在我用的是django1.6+
我有一个模型:
class FileReference(models.Model):
# some data fields
# ...
pass
class Person(models.Model):
avatar = models.ForeignKey(FileReference, related_name='people_with_avatar')
class House(models.Model):
images = models.ManyToManyField(FileReference, related_name='houses_with_images')
class Document(model.Model):
attachment = models.OneToOneField(FileReference, related_name='document_with_attachment')
因此,许多其他模型将有一个外键引用FileReference
模型。在
但有时,引用模型会被删除,留下FileReference
对象。在
我想删除没有外键引用的FileReference
对象。在
但是其他地方会有外键。在
有没有什么有效的方法可以找到所有的参考资料?i、 获取某个模型对象的引用计数?在
我偶然发现了这个问题,我给你找到了一个解决办法。请注意,
django==1.6
不再受支持,因此此解决方案可能适用于django>=1.9
假设我们现在讨论的是其中两个对象:
正如您在ForeignKey.on_delete文档中看到的,当您删除相关的
FileReference
对象时,被引用的对象Person
也会被删除。在现在回答你的问题。我们怎么做受尊敬的人?我们希望在
Person
删除时,FileReference
对象也将被删除。在我们将使用post_delete signal:
^{pr2}$我们所做的是删除
avatar
字段中的引用Person
删除。请注意,try: except:
块用于防止循环异常。在额外:
上述解决方案将适用于所有未来对象。如果要删除所有没有引用的过去对象,请执行以下操作:
在包中添加以下文件和目录:
management/commands/remove_unused_file_reference.py
完成后,请致电:
python manage.py remove_unused_file_reference
这是基本思想,你可以把它改成批量删除等等。。。在我希望这会对其他人有所帮助。祝你好运!在
相关问题 更多 >
编程相关推荐