Django - Class Based Generic View - “No URL to redirect to”

前端 未结 5 617
既然无缘
既然无缘 2021-01-31 14:09

I\'m using the generic CreateView like:

#urls.py

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


        
相关标签:
5条回答
  • 2021-01-31 14:42
    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
    
    0 讨论(0)
  • 2021-01-31 14:45

    Have you tried passing in success_url? e.g.

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

    or if you want to redirect to a named view:

    CreateView.as_view(model=myModel, success_url=reverse('success-url'))
    
    0 讨论(0)
  • 2021-01-31 14:46

    Add in views:

    def form_valid(self, form):
    
       return self.render_to_response(self.get_context_data(form=form))
    
    0 讨论(0)
  • 2021-01-31 14:48

    you can also try to define get_absolute_url in your models. For example

    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 
    
    0 讨论(0)
  • 2021-01-31 14:48

    views.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/ (of your app)

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('create/', views.createView.as_view(), name='create') 
    ] 
    
    0 讨论(0)
提交回复
热议问题