我需要保存文件,而不是来自request.FILES,而是保存另一个记录。将文件从保存的FileField复制到Django中的UploadedFile
下面是该模型记录代码:
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
值。
完成的代码在github上可用:https://github.com/JordanReiter/django-unauth-posting如果有人发现它有用,请让我知道。另外,请分叉并改进它! – 2011-05-02 18:42:49