# models.py
class Profile(models.Model):
name = models.CharField(max_length=255)
image = models.ImageField(upload_to=image_path, blank=True, null=True)
# forms.py
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = '__all__'
# views.py
def profile(request, id):
p = get_object_or_404(Profile, pk=id)
profile_form = ProfileForm(request.POST or None,
files=request.FILES or None,
instance=p)
if request.method == 'POST':
if profile_form.is_valid():
profile_form.save()
return render(request, 'profile.html', {'form': profile_form})
#profile.html
<form method="post" action="" enctype="multipart/form-data" >
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
Если пользователь GETs/профиль/1 и 1 существует, они получают форму укажи со всеми значениями, в том числе изображения (если таковые имеются)Джанго 1,10: При визуализации ModelForm после обновления, ImageFields не хватает, когда они изменили
Если пользователь затем POST обновляет любое из полей, кроме изображения (очистка или изменение), страница отображается правильно после обновления.
Однако, если пользователь меняет изображение (очистить или изменить), это изменение не будет отражено в рендерном результате: изображение всегда отображается как пустое. быстрый GET решает ситуацию и отображает измененную ситуацию.
Кто-нибудь знает, почему в этой области не отображается обновление?
с добавлением return redirect() работает, но зачем мне? Я должен иметь все данные в profile_form, почему он отличается от экземпляра без данных POST? Это также дополнительный HTTP-запрос и дополнительный вызов БД. – djoek
Аргумент 'instance' для формы модели только предоставляет форме доступ к объекту, он не определяет данные, которые несет форма. Если у вас есть данные «POST» в форме, это будет отображаться форма. Таким образом, необходимо иметь «дополнительный запрос и вызов db», проверить django doc о том, как работать с формой: https://docs.djangoproject.com/en/1.10/topics/forms/#the-view –