ハードリンクを使用してファイルをコピーしようとしています。ファイルはDjangoFileFieldとして保存されています。スペースとコピー時間を節約するためにハードリンクを使用したい(元のファイルまたはコピーに変更が加えられることはない)。ただし、以下のスニペットからnew_file.save()を呼び出そうとすると、奇妙なエラーが発生します。
AttributeError: 'file' object has no attribute '_committed'
私の考えでは、ハードリンクを作成した後、リンクされたファイルを開いて、Djangoの新しいファイルインスタンスのFileFileに保存するだけです。私はここか何かのステップを逃していますか?
models.py
class File(models.Model):
stored_file = models.FileField()
others.py
import os
original_file = File.objects.get(id=1)
original_file_path = original_file.file.path
new_file = File()
new_file_path = '/path/to/new/file'
os.makedirs(os.path.realpath(os.path.dirname(new_file_path)))
os.link(original_file_path, new_file_path)
new_file.stored_file = file(new_file_path)
new_file.save()