Мне нужно сохранять файлы не из 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
.
Так что, я думаю, мне интересно, что я могу сделать со значениями FieldFile
из FooField
, чтобы они вели себя как традиционный UploadedFile и получали значения upload_to
и path
для соответствующих полей. *