У меня довольно стандартная модель и форма. У меня есть обязательные поля с 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))
Вот что я пытался сохранить изображение в БД, даже если другие поля не являются заполнен, но я получаю ошибку Джанго ошибки при загрузке - Загрузить действительное изображение (либо не изображение или поврежден):
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)