2010-01-11 3 views
2

J'essaie de modifier un objet existant via un formulaire. Tout fonctionne correctement, sauf que ImageField n'est pas rempli avec la valeur actuelle.Lors de la modification d'un objet dans django, le champ ImageField n'est pas rempli

Voici le modèle:

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') 

Voici la vue

@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) 

Et voici un spectacle d'écran du formulaire d'édition. http://yfrog.com/jnscreenshot20100110at102jp

Cet objet avait une miniature ci-joint, mais quand je suis allé à modifier, rien montré dans le champ Miniature

+0

Une capture d'écran n'a pas de code. pourquoi ne pas poster le fichier html rendu? nous pouvons seulement faire ce que les sheats ont fait et supposons que vous utilisez 'form.as_p'. –

Répondre

4

Je crois que la réponse réside dans le fait que le champ d'entrée de fichier, quand il affiche une valeur , affiche le chemin d'accès local au fichier sur l'ordinateur de l'utilisateur sélectionné. Cette valeur n'est enregistrée nulle part dans Django, donc Django ne peut pas afficher cette valeur dans le formulaire lors de la modification.

Ce que vous devez faire est d'imprimer chaque champ individuellement dans le modèle au lieu d'imprimer le formulaire dans son ensemble. Puis, avec votre champ de miniatures, affichez la miniature actuellement sélectionnée en tant qu'image réelle sur la page et utilisez le champ de saisie de fichier pour permettre à l'utilisateur de télécharger une nouvelle image.

Questions connexes