以下是我项目中django代码的简化版本;它允许用户上传文件并给它一个标题。此功能非常有效。但是,当用户稍后重新编辑表单时,会重新显示文件和标题,但是当用户提交文件时会清空文件。重新打开以进行编辑的表单的文件字段如下所示:
目前: media_location / uploadedfile.mp3
更改:[选择文件]无文件选择
在我提交之后,它是:
- 此归档是必需的
[选择文件]无文件选择
如何获取它以便用户不必重新上传文件?一旦提交完成,该字段是否只读,或者它是否仍然可编辑,这对我来说无关紧要。完成的项目不适用于客户端,只能供一小组可信用户使用,但我仍希望尽可能遵循最佳实践。谢谢你的帮助。
Django代码:
models.py
class Recording(models.Model):
rec_title=models.CharField(max_length=200,blank=True)
rec_file = models.FileField(upload_to='recordings')
forms.py
from django import forms
from songstorage.models import Recording
class RecordingForm(forms.ModelForm):
rec_file=forms.FileField(label='Upload File')
rec_title=forms.CharField(label='Recording Title',required=False)
class Meta:
model=Recording
views.py
def addrecordings(request,recordingfile):
#if there is a recordingfile in the url, the user is editing...
if recordingfile:
recording=Recording.objects.get(rec_title=recordingfile)
recording_form = RecordingForm(instance=recording)
#...Otherwise a new form is createing a new one
else:
recording_form = RecordingForm(request.POST, request.FILES)
#When the form is submitted, do the following:
if request.method == 'POST':
#check if its valid
if recording_form.is_valid():
recording_form.save()
#if sucessfully submitted, redirect
return redirect('/recordings/')
return render_to_response('addrecordings.html',{'recording_form':recording_form},context_instance=RequestContext(request))
答案 0 :(得分:0)
我遇到了同样的问题,无法弄清楚如何搜索任何有用的东西,我现在的解决方案是在你的场景中使用另一种形式:
class RecordingUpdateForm(RecordingForm):
rec_file=forms.FileField(label='Upload File', required=False)
唯一的区别是我使用的是基于UpdateView类的视图,因此您必须修改视图函数以使用RecordingUpdateForm
进行更新。
答案 1 :(得分:0)
我遇到了同样的问题。
您可以覆盖模型的默认清除功能。这样可以验证所有表单,用户可以在编辑时更改图像文件,并保证文件非空。
class MyModel(models.Model):
image = models.ImageField(blank=True)
def clean(self, *args, **kwargs):
super(MyModel, self).clean(*args, **kwargs)
if not self.image:
raise ValidationError('Please provide an image')