Question

Je suis en train de construire un mini-système de réponse, en fonction des messages de l'utilisateur sur un blog mini. Chaque poste a un lien nommé réponse. si on appuie réponse, le formulaire de réponse apparaît, et une modifications de la réponse, et soumet le problème form.The est que je ne sais pas comment prendre l'identifiant du message que je veux répondre. De l'avis, si je l'utilise comme paramètre un numéro (comme un identifiant du poste de blog), il insère la réponse à la base de données. Mais comment puis-je le faire en ne hardcoding?

Le point de vue est le suivant:

def save_reply(request):

  if request.method == 'POST':
    form = ReplyForm(request.POST)
    if form.is_valid():
       new_obj = form.save(commit=False)
       new_obj.creator = request.user
       new_post = New(1) #it works only hardcoded
       new_obj.reply_to = new_post
       new_obj.save()
       return HttpResponseRedirect('.')    
  else:
       form = ReplyForm()     
  return render_to_response('replies/replies.html', {
       'form': form,
       }, 
      context_instance=RequestContext(request))  

J'ai en forms.py:

  class ReplyForm(ModelForm):
    class Meta:
      model = Reply
      fields = ['reply']

et dans les modèles:

class Reply(models.Model):
reply_to = models.ForeignKey(New)
creator = models.ForeignKey(User)
reply = models.CharField(max_length=140,blank=False)
    objects = NewManager()   

mentionner que la Nouvelle est la classe micro blog

    thanks
Était-ce utile?

La solution

heyy là. i résolu le problème, en utilisant vos conseils, mais je l'ai créé un autre. Je pensais que le formulaire de réponse est dans une autre page, en cliquant simplement sur ce lien de réponse ne va pas aider Retenez l'identifiant de poste de toute façon, parce que la page de blog est parti, après que je pousse Thet bouton de réponse. Donc, à mon avis, je « ai créé une fonction qui détient l'identifiant du poste de blog comme un paramètre. Il sauve tout comme il se doit, pas de problème, mais maintenant mon problème est: Comment passer un lien comme

    url(r'^save_reply/(?P<id>\d+)/$', 
                       save_reply,
                       name='save_reply'), 

(ce que je tiens dans ma urls.py) à la réponse dans chaque poste? Je veux dire, jusqu'à présent, mon lien de réponse était simplement appelle les réponses de la fonction / save_reply (j'avais Répondre) mais maintenant, quand je l'identifiant comme paramètre, comment puis-je mettre dans mon a href = 'ce ici?

voici mon views.py qui fonctionne à droite:

 def save_reply(request, id):

 if request.method == 'POST':
    form = ReplyForm(request.POST)
    if form.is_valid():
       new_obj = form.save(commit=False)
       new_obj.creator = request.user

       u = New.objects.get(pk=id)
       new_obj.reply_to = u   

       new_obj.save()
       return HttpResponseRedirect('.')    
 else:
       form = ReplyForm()     
 return render_to_response('replies/replies.html', {
       'form': form,
       }, 
      context_instance=RequestContext(request))  

et je suis Callin en tapant dans mon navigateur: http://127.0.0.1:8000/replies/save_reply/1/ ( par exemple) Bien sûr, je l'ai enlevé mon champ de clé étrangère, comme il est maintenant unnecessarry

Merci!

Autres conseils

Vous devez avoir un champ caché dans votre formulaire pour capturer le PK de quel instance de Nouveau commentaire est lié à.

Puisque vous utilisez un ModelForm, votre modèle de réponse a déjà la relation ForiegnKey établie. Vous pouvez définir le type widget de pour être caché, afin que vos utilisateurs ne voient pas ..

# forms.py
class ReplyForm(ModelForm):
    class Meta:
        model = Reply
        fields = ['reply', 'reply_to']
        widgets = {
            'reply_to': forms.HiddenInput),
        }

Lorsque vous initialisez le ReplyForm, vous pouvez remplir le champ reply_to comme form = ReplyForm({'reply_to': new.pk}) - où new est une instance de New

BTW vous pouvez envisager de modifier le nom de votre modèle New à quelque chose comme Post. « Nouveau » est un peu difficile d'en parler, et un peu déroutant puisque « nouveau » signifie généralement quelque chose de complètement différent dans un contexte de programmation.

  

si on appuie réponse, le formulaire de réponse apparaît,

Je pense que ceci est la partie que vous devez travailler. Lorsque le formulaire de réponse est rendue, elle doit avoir l'identifiant du poste auquel on répond à avec elle (l'instance de la Nouvelle). Cela a sans doute à venir par la demande, sauf si vous avez une autre façon de garder la trace de celui-ci?

Quelque chose le long des lignes de:

def save_reply(request):
    ...
    else:
        form = ReplyForm()
        form.reply_to = New.objects.get(id=request.REQUEST["post_id"])

Ainsi, vous devez vous assurer que le lien qui provoque la forme à rendre comprend un « post_id » param (ou similaire - sans doute vous avez déjà un équivalent, utilisé pour l'affichage du poste en question?).

A côté de la balise

widgets = {
        'reply_to': forms.HiddenInput),
}

Code cela devrait rendre le formulaire que vous en avez besoin.

id message doit être transmis tout au long de la chaîne

- post_id-> Rendu message --post_id-> Rendu Formulaire de réponse --post_id-> Magasin Répondre

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top