Невозможно перенаправить из CreateView - PullRequest
1 голос
/ 07 июня 2019

Я новичок и неопытен в Django и пытаюсь реализовать представление, основанное на классах, и полностью застрял, пытаясь установить success_url.

Я пробовал два подхода, которые, на мой взгляд, наиболее близки к корректности на основеGoogle и не уверен, какой из них наименее сломан:

  1. success_url = 'letters / home' -> приводит к непреднамеренному перенаправлению / letters / write / letters / home, тогда как я хочу перейти на/ letters / home

  2. reverse_lazy ('letters: home') приводит к "Обратному для 'home' не найдено. 'home' не является допустимой функцией просмотра или именем шаблона."

Вот мой код:

Просмотр

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

Где я ошибся?(

1 Ответ

2 голосов
/ 07 июня 2019
urlpatterns = [
    path('home/', views.HomeView.as_view(),name="home"),
    path('write/<str:slug>', views.WriteLetterView.as_view()),
]


 success_url = reverse_lazy('letters:home')

это будет сделано, так как вы не назвали домашний URL, поэтому он показывает, что URL не найден

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...