2017-09-14 1 views
0

J'essaye de créer un formulaire avec Django 1.10 pour créer un commentaire sur un objet Tâche. Quand je veux ouvrir le formulaire, il n'y a pas de champ et lorsque je tente de présenter, j'eu cette erreur:Les formulaires Django ne seront pas rendus (pas de correspondance inverse)

NoReverseMatch à/tâches/29/commentaire/ inverse pour « create_comment » avec des arguments « ('',)' pas trouvé. 1 motif (s) a essayé: [u'tasks// commentaires/$ '(P [0-9] +?)]

Comment puis-je rendre ma forme sur mon modèle, et revenir à mon « détail "voir après soumettre?

forms.py

class CreateCommentForm(forms.Form): 
    commentary = forms.CharField(label='Commentary', widget=forms.Textarea, required=True) 

models.py

class Comment(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    task = models.ForeignKey(Task, on_delete=models.CASCADE) 
    commentary = models.TextField(blank=True, max_length=5000) 
    created_at = models.DateTimeField(auto_now_add=True) 

def __str__(self): 
    return self.commentary 

views.py

class CommentCreateView(SuperuserRequiredMixin, FormView): 
    template_name = 'tasks/create_comment_modal.html' 
    form_class = CreateCommentForm 

def form_valid(self, form): 
    user = self.request.user 
    task = Task.objects.get(id=self.kwargs['pk']) 
    commentary = form.cleaned_data['commentary'] 
    comment = Comment(user=user, task=task, commentary=commentary) 
    comment.save() 
    return HttpResponseRedirect(reverse('tasks:detail', kwargs={'pk': task.id})) 

urls.py

url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'), 
url(r'^(?P<pk>[0-9]+)/comment/$', views.CommentCreateView.as_view(), name='create_comment'), 

create_comment_modal.html

{% load widget_tweaks %} 
<form role="form" id="comment-create-form" name="comment-create-form" method="post" action="{% url 'tasks:create_comment' task.id %}"> 
<div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal">&times;</button> 
    <h4 class="modal-title">Add comment in task #{{ task.id }} - {{ task.title }}</h4> 
</div> 
<div class="modal-body"> 
    {% csrf_token %} 
    <div class="row"> 
     <div class="col-lg-12"> 
      <div class="form-group"> 
       <label class="control-label" for="{{ form.commentary.id_for_label }}">Commentary</label> 
       {% render_field form.commentary class+="form-control" %} 
      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-lg-12"> 
      <div id="current_user"> 
       Comment by : {{ user.first_name }} {{ user.last_name }} 
      </div> 
     </div> 
    </div> 
</div> 
<div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
    <button type="submit" class="btn btn-primary" value="deploy">Submit</button> 
</div> 
</form> 
+0

essayer avec: def get_success_url (auto): inverse de retour ('tâches: détail', kwargs = { 'pk': self.task.id}) dans CommentCreateView –

Répondre

0

Le {% url 'tasks:create_comment' task.id %} intérieur de votre forme semble suspect.

Ajoutez-vous task à votre contexte dans le CommentCreateView?

Ajoutez les lignes suivantes à votre CommentCreateView:

def get_context_data(self, **kwargs): 
    context = super().get_context_data(**kwargs) 
    context.update({'task': Task.objects.get(id=self.kwargs['pk'])}) 
    return context 
+0

Merci cela fonctionne parfaitement! J'ai utilisé: context = super (CommentCreateView, self) .get_context_data (** kwargs) – dxtr69