我是 Django 新手,缺乏经验,试图实现基于类的 View ,但完全陷入尝试设置 success_url 的困境。
我尝试了两种我认为基于 Google 最接近正确的方法,但不确定哪一种最不被破坏:
success_url = 'letters/home' -> 导致意外重定向/letters/write/letters/home 而我希望它转到/letters/home
reverse_lazy('letters:home') 会导致“找不到 'home' 的反向操作。'home' 不是有效的 View 函数或模式名称。”
这是我的代码:
查看
from .models import Topic
from django.views.generic.edit import CreateView
from django.views.generic import TemplateView
from django.urls import reverse_lazy
from .forms import WriteLetterForm
class HomeView(TemplateView):
template_name = 'letters/letter/home.html'
class WriteLetterView(CreateView):
template_name = 'letters/letter/write_letter.html'
form_class = WriteLetterForm
success_url = 'letters/home' # reverse_lazy('letters:home')
# success_url = 'letters/home'
# success_url = reverse_lazy('HomeView')
def form_valid(self,form):
form.instance.author = self.request.user
form.instance.topic = Topic.objects.get(slug=self.kwargs['slug'])
result = super(WriteLetterView,
self).form_valid(form)
cd = form.cleaned_data
# user = authenticate(username=cd['username'],
# password=cd['password1'])
# login(self.request, user)
return result
应用内的 urls.py
from django.urls import path
from . import views
app_name = 'letters'
urlpatterns = [
path('home/', views.HomeView.as_view()),
path('write/<str:slug>', views.WriteLetterView.as_view()),
]
forms.py
from django import forms
from .models import Letter
from braces.forms import UserKwargModelFormMixin
class WriteLetterForm(UserKwargModelFormMixin, forms.ModelForm):
#letter = forms.ModelChoiceField(queryset=Letter.objects.all())
class Meta:
model = Letter
fields = ['body', 'picture_1', 'picture_2', 'picture_3']
def create(self):
obj = super(WriteLetterForm, self).save(commit=False)
obj.author_id = self.user
obj.save()
return obj
我哪里出错了? :(
最佳答案
urlpatterns = [
path('home/', views.HomeView.as_view(),name="home"),
path('write/<str:slug>', views.WriteLetterView.as_view()),
]
success_url = reverse_lazy('letters:home')
这样就可以了,因为您还没有命名主页网址,因此它显示找不到网址
关于python - 无法从 CreateView 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489175/