51 votes

Django - Vue générique basée sur les classes - "Aucune URL vers laquelle rediriger"

J'utilise le générique CreateView comme :

 #urls.py

from django.conf.urls.defaults import *
from django.views.generic import CreateView
from content.models import myModel

urlpatterns = patterns('myApp.views',
    (r'myCreate/$', CreateView.as_view(model=myModel)),
)

Avec un modèle mymodel_form.html comme :

 <form method="post" action="">
{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Submit" />
</form>

Lorsque je soumets mon formulaire, le nouvel objet est créé mais j'obtiens l'erreur

Mal configuré à ...

Aucune URL vers rediriger vers. Soit fournir une URL ou définir une méthode get_absolute_url sur le modèle.

Comment puis-je spécifier l'url à rediriger en cas de succès ?

77voto

NickAldwin Points 4494

Avez-vous essayé de passer success_url ? par exemple

 CreateView.as_view(model=myModel, success_url="/success/")

ou si vous souhaitez rediriger vers une vue nommée :

 CreateView.as_view(model=myModel, success_url=reverse('success-url'))

19voto

zzart Points 2162

vous pouvez également essayer de définir get_absolute_url dans vos modèles. Par exemple

 class Something(models.Model):
    name = models.CharField(max_length=50, verbose_name='name')

    class Meta:
        pass

    def get_absolute_url(self):
        return u'/some_url/%d' % self.id 

1voto

user2567460 Points 9

Ajouter des vues :

 def form_valid(self, form):

   return self.render_to_response(self.get_context_data(form=form))

0voto

AndresMa Points 1

vues.py/

 from django.views.generic import CreateView
from .models import myModel

class createView(CreateView):
    model = myModel
    fields = ['your fields', ...'']

    def get_success_url(self):
        return reverse('some_url')

urls.py/ (de votre application)

 from django.urls import path
from . import views

urlpatterns = [
    path('create/', views.createView.as_view(), name='create') 
] 

-1voto

UZAIR69 Points 7
class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Post
    success_url = '/'
    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X