Django-fr

Forum

#1 26-01-2011 18:50:54

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Un script d'édition qui n'édite pas

Bonjour à tous !
Je suis confronté à un problème que je n'arrive pas à régler. J'ai réalisé un script qui me permet d'éditer une réponse mais, elle m'ajoute une nouvelle entrée au lieu de me la mettre à jour et pour tout vous dire, je ne comprends absolument pas pourquoi.

@login_required
def edit_answer(request, thread_id = None, message_id = None):
    thread = Thread.objects.get(thread = thread_id)
    answer = get_object_or_404(Message, pk = message_id)
    
    if not request.user.is_superuser or answer.author.id is not request.user.id:
        return HttpResponseForbidden(u'Vous n\'avez pas accès à cette page')
    
    if request.method == 'POST':
        form = MessageForm(data=request.POST)
        
        if form.is_valid():
            answer.content = form.cleaned_data['content']
            answer.save()
            
            return HttpResponseRedirect(reverse('forums.views.thread', args=(thread_id)))
            
    else:
        form = MessageForm(instance=answer)
        
    return render_to_response('forums/add_answer.html', {'form': form, 'thread': thread}, context_instance = RequestContext(request))

Pourriez-vous m'apporter une petite aide ?
Merci :)

Hors ligne

#2 26-01-2011 19:13:16

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

j'essaye de répondre...
une logique plus "standard" du point de vue de la doc :

if request.method == 'POST':
    form = MessageForm(request.POST,instance=answer) #sans data = ...
    if form.is_valid():
        form.save()
        #et on touche pas en direct au cleaned_data

Dernière modification par quinode (26-01-2011 19:13:56)

Hors ligne

#3 26-01-2011 19:17:08

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

Crois bien que j'eue déjà essayé...  Le problème, c'est qu'après, je vais devoir mettre à jour un champ pour l'édition mais il m'en ajoute toujours, jamais de mise à niveau.
Voici ma fonction complète :

@login_required
def edit_answer(request, thread_id = None, message_id = None):
    thread = Thread.objects.get(thread = thread_id)
    answer = get_object_or_404(Message, pk = message_id)
    
    if not request.user.is_superuser or answer.author.id is not request.user.id:
        return HttpResponseForbidden(u'Vous n\'avez pas accès à cette page')
    
    if request.method == 'POST':
        form = MessageForm(request.POST, instance = answer)
        
        if form.is_valid():
            s = form.save(commit = False)
            
            if request.user.id != s.author.id:
                s.user_update = request.user
                
            s.save()
            
            return HttpResponseRedirect(reverse('forums.views.thread', args=(thread_id)))
            
    else:
        form = MessageForm(instance=answer)
        
    return render_to_response('forums/add_answer.html', {'form': form, 'thread': thread}, context_instance = RequestContext(request))

Dernière modification par Sh4ke (26-01-2011 19:21:48)

Hors ligne

#4 26-01-2011 19:21:49

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

Essaie de faire un

print type(answer)

juste après ton appel a "get_object_or_404", et si tu vois "Nonetype" c'est que le message_id est pas transmis ou n'est pas le bon, donc verifier les url...

Hors ligne

#5 26-01-2011 19:23:24

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

J'ai comme retour :

<class 'nouweo.forums.models.Message'>

Mon problème est quand j'édite, une nouvelle entrée est ajoutée à la place d'une mise à jour et que je ne comprends pas pourquoi.

Dernière modification par Sh4ke (26-01-2011 19:24:44)

Hors ligne

#6 26-01-2011 20:02:49

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

il trouve donc le message à modifier
pas de raison que le code ci-dessous ne fonctionne pas

if request.method == 'POST':
    form = MessageForm(request.POST,instance=answer) #sans data = ...
    if form.is_valid():
        form.save()
        return HttpResponseRedirect(reverse('forums.views.thread', args=(thread_id)))

Dernière modification par quinode (26-01-2011 20:04:19)

Hors ligne

#7 26-01-2011 20:26:36

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

Bah, il ne fonctionne pas. Il m'ajoute une entrée au lieu de l'éditer x)

Hors ligne

#8 26-01-2011 20:34:23

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

c'est quoi "s.user_update" ? une methode de Message ?
elle appelerait pas save() dans ton modele?

Hors ligne

#9 26-01-2011 20:40:52

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

s.user_update est un simple champ qui est normalement vide. Je te donne mon modèle :

class Message(models.Model):
    content = models.TextField(u'Votre message')
    posted_at = models.DateTimeField(u'Date de publication', auto_now_add = True)
    updated_at = models.DateTimeField(u'Date de modification', blank = True, null = True)
    
    is_hide = models.BooleanField(u'Message censuré', default = 0)
    is_delete = models.BooleanField(u'Message supprimé', default = 0)
    
    user_update = models.ForeignKey(User, related_name = 'editor', blank = True, null = True)
    author = models.ForeignKey(User, related_name = 'author')
    thread = models.ForeignKey(Thread, related_name = 'thread')
    
class MessageForm(ModelForm):    
    class Meta:
        model = Message
        exclude = ('user_update', 'thread', 'author', 'posted_at', 'updated_at')
        widgets = {
            'content': Textarea(attrs={'cols': 45, 'rows': 13, 'class': 'taille_textarea'}),
        }

Cela peut-il provenir de l'utilisation de la version de développement ?

Dernière modification par Sh4ke (26-01-2011 21:19:20)

Hors ligne

#10 26-01-2011 21:42:49

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Un script d'édition qui n'édite pas

Le code de ce post : http://forum.django-fr.org/viewtopic.php?pid=2465#p2465

Me semble correct. Es-tu sur que answer possède bien déjà un ID ?

Hors ligne

#11 26-01-2011 21:58:49

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

Oui, sinon je n'aurais pas pu le récupérer wink

Même en faisant cela, il n'y a pas d'update :

if form.is_valid():
            s = form.save(commit = False)
            
            s.id = 1
            
            if request.user.id != s.author.id:
                s.user_update = request.user
            
            s.updated_at = datetime.today()
            s.save()            
            return HttpResponseRedirect(reverse('forums.views.thread', args=(thread_id)))

Si cela peut servir, j'ai cette erreur au bout d'un moment :

Caught NoReverseMatch while rendering: Reverse for 'forums.views.edit_answer' with arguments '(1, 10)' and keyword arguments '{}' not found.

Dernière modification par Sh4ke (26-01-2011 22:11:43)

Hors ligne

#12 27-01-2011 10:01:45

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

tu pourrais enlever la redirection pour l'instant, en attendant de régler le pb de creation/maj

Hors ligne

#13 27-01-2011 13:45:37

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

Mon problème a été résolu smile

Merci à tous.

Hors ligne

#14 27-01-2011 14:01:51

Romain
Membre
Inscription : 11-08-2010
Messages : 27

Re : Un script d'édition qui n'édite pas

Le 27/01/2011 13:45, Sh4ke a écrit :
> Mon problème a été résolu smile
>
> Merci à tous.

Et quel était le problème identifié?
La solution adoptée?

Hors ligne

#15 27-01-2011 18:27:34

Sh4ke
Membre
Inscription : 13-10-2010
Messages : 14

Re : Un script d'édition qui n'édite pas

Le problème était une redirection lors de mon template. Les URLs n'étaient pas correspondantes.

Hors ligne

#16 27-01-2011 18:33:24

Romain
Membre
Inscription : 11-08-2010
Messages : 27

Re : Un script d'édition qui n'édite pas

Le 27 janv. 2011 à 18:27, Sh4ke a écrit :

> Le problème était une redirection lors de mon template. Les URLs
> n'étaient pas correspondantes.

merci pour l'info =^p

Hors ligne

#17 27-01-2011 19:33:53

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Un script d'édition qui n'édite pas

yikes

Hors ligne

Pied de page des forums