При редактировании объекта в django ImageField не заполняется

Я пытаюсь отредактировать существующий объект через форму. Все работает нормально, за исключением того, что ImageField не заполняется текущим значением.

Вот модель:

class Post(models.Model):
    author = models.ForeignKey(User, editable=False)
    slug = models.SlugField(max_length = 110, editable=False)
    title = models.CharField(verbose_name='Blog Title', max_length=40, blank=False)
    body = models.TextField(verbose_name='Body')
    thumbnail = models.ImageField(upload_to = 'posts/%Y/%m')

вот вид

@login_required
def edit_profile(request, form_class=UserProfileForm, success_url=None, template_name='profiles/edit_profile.html', extra_context=None):

try:
    profile_obj = request.user.get_profile()
except ObjectDoesNotExist:
    return HttpResponseRedirect(reverse('profiles_create_profile'))

if success_url is None:
    success_url = reverse('profiles_profile_detail',
                          kwargs={ 'username': request.user.username })
if form_class is None:
    form_class = utils.get_profile_form()
if request.method == 'POST':
    form = form_class(data=request.POST, files=request.FILES, instance=profile_obj)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect(success_url)
else:
    form = form_class(instance=profile_obj)

if extra_context is None:
    extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
    context[key] = callable(value) and value() or value

return render_to_response(template_name,
                          { 'form': form,
                            'profile': profile_obj, },
                          context_instance=context)

К этому объекту была прикреплена миниатюра, но когда я перешел к редактированию, в поле «Миниатюра» ничего не появилось.


person silent1mezzo    schedule 11.01.2010    source источник
comment
скриншот не имеет кода. почему бы не опубликовать обработанный html? мы можем сделать только то, что сделали sheats, и предположить, что вы используете form.as_p.   -  person Brandon Henry    schedule 11.01.2010


Ответы (1)


Я считаю, что ответ заключается в том, что поле ввода файла, когда оно отображает значение, отображает локальный путь к файлу на компьютере пользователя, который был выбран. Это значение нигде не сохраняется в Django, поэтому Django не может и не будет отображать это значение в форме при редактировании.

Что вам нужно сделать, так это распечатать каждое поле в шаблоне по отдельности, а не распечатывать форму целиком. Затем с помощью поля эскиза покажите текущую выбранную миниатюру как фактическое изображение на странице и используйте поле ввода файла, чтобы позволить пользователю загрузить новое изображение.

person sheats    schedule 11.01.2010