1
我有一個相當標準的模式和形式。我有一個ImageField必填字段。當用戶選擇一個圖像並且沒有輸入必填字段時,圖像不會保存,用戶需要重新上傳。Django的 - 如何保存的ImageField即使表單不正確
由於在數據庫中的行已存在(因爲這種形式是一個「嚮導」的一部分),我不介意保存在數據庫中的圖片,即使所有的表格是不是所有的強制性數據有效。
這就是我現在所擁有的在我看來,當您填寫所有的必填字段,其工作原理:
def my_view(request):
instance = MyModel.objects.get(user=request.user)
form = MyForm(instance=instance)
if request.POST:
form = MyForm(request.POST, request.FILES, instance=instance)
if form.is_valid():
new_instance = form.save(commit=False)
if request.FILES and request.FILES['photo']:
uploaded_photo = request.FILES['photo']
new_instance.photo = uploaded_photo
new_instance.save()
return HttpResponseRedirect(reverse('new_url'))
return render_to_response('current_template.html', locals(), context_instance=RequestContext(request))
這裏就是我試圖將圖片保存在DB即使其他領域不填補,但我得到的錯誤Django的上傳錯誤 - 上傳一個有效的圖像(或者沒有圖像或損壞):
def my_view(request):
instance = MyModel.objects.get(user=request.user)
form = MyForm(instance=instance)
if request.POST:
form = MyForm(request.POST, request.FILES, instance=instance)
if request.FILES and request.FILES['photo']:
uploaded_photo = request.FILES['photo']
instance.photo = uploaded_photo
instance.save()
if form.is_valid():
new_instance = form.save()
return HttpResponseRedirect(reverse('new_url'))
return render_to_response('current_template.html', locals(), context_instance=RequestContext(request))
這裏是我的形式(很簡單):
class MyForm(ModelForm):
first_name = forms.CharField(label='First Name', max_length=50, required=True)
last_name = forms.CharField(label='Last Name', max_length=50, required=True)
photo = forms.ImageField(required=False)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
fields = ('first_name','last_name', 'photo')
這裏是我的模型(同樣很簡單):
class MyModel(models.Model):
first_name = models.TextField(max_length=50)
last_name = models.TextField(max_length=50)
photo = ImageField(upload_to=get_photo_path,null=True,blank=True)