request.FILESからではなく、別の保存されたレコードからファイルを保存する必要があります。
モデルレコードのコードは次のとおりです。
class Foo(models.Model)
slug = models.SlugField()
class FooFile(models.Model):
name = models.CharField(max_length=100)
file = models.FileField(upload_to='foo_folder')
foo = models.ForeignKey(Foo, related_name='files')
class RealRecord(models.Model):
slug = models.SlugField()
awesome_file=models.FileField(upload_to='awesome')
mediocre_file=models.FileField(upload_to='mediocre')
そして、ビュー(この場合MyForm
はRealRecordに保存するモデルフォームです):
def example(request, record=1, template_name="form.html")
foo_obj = Foo.objects.get(pk=record)
SAVED_FILES = {}
for file in foo_obj.files.all():
SAVED_FILES[file.name]=file.file
if request.method == 'POST':
form = MyForm(data=request.POST, files=SAVED_FILES)
if form.is_valid():
form.save()
# rest of view
else:
form = MyForm()
return render(request, template_name, locals())
つまり、基本的にはオブジェクトFieldFile
として使用されているということです。UploadedFile
それぞれFoo
に名前のFooFile
レコードと名前awesome_file
のレコードがmediocre_file
あり、の必須フィールドと一致しますRealRecord
。
クレイジーなことは、これは完全に検証されます。ただし、問題は、作成される結果のレコードで、awesome_fileとmediocre_fileの両方のパスが「foo_folder」にあることです。ただし、「foo_folder」内のファイルは必要ありません。の各フィールドに指定したパスにファイルを配置する必要がありますRealRecord
。
したがって、従来のUploadedFileのように動作し、それぞれのフィールドの値と値を取得するために、FieldFile
からの値に対して何ができるのか疑問に思っていると思います。FooField
upload_to
path