我是Django的新手,在填写AddContactEvent表单后无法重定向。提交表单后,这是重定向错误:
没有要重定向到的URL。提供网址或定义一个 模型上的get_absolute_url方法。
自AddContactEvent URL path('contacts/<int:pk1>/addcontactevent)
起,我很难弄清楚如何重定向它
只有一个PK。在EventDetail网址中,显然有两个pk,分别是联系人pk和事件pk。 EventDetail页面似乎正在创建,但是由于多个PK,我无法将其重定向到该页面。您将如何处理重定向?
urls.py
path('contacts/<int:pk>', contact_detail.as_view(), name="contact_detail"),
path('contacts/<int:pk1>/addcontactevent', AddContactEvent.as_view(), name="addcontactevent"),
path('contacts/<int:pk1>/event/<int:pk2>/update', UpdateContactEvent.as_view(), name="updatecontactevent"),
path('contacts/<int:pk1>/event/<int:pk2>', EventDetail.as_view(), name="eventdetail"),
views.py
class AddContactEvent(CreateView):
form_class = ContactEventForm
template_name = 'crm/contactevent.html'
def dispatch(self, request, *args, **kwargs):
"""
Overridden so we can make sure the `Ipsum` instance exists
before going any further.
"""
self.contact = get_object_or_404(Contact, pk=kwargs['pk1'])
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
""" Save the form instance. """
contact = get_object_or_404(Contact, pk=self.kwargs['pk1'])
form.instance.contact = contact
form.instance.created_by = self.request.user
return super().form_valid(form)
class UpdateContactEvent(UpdateView):
model = Event
def get_object(self):
pk1 = self.kwargs['pk1']
pk2 = self.kwargs['pk2']
contact = get_object_or_404(Contact, pk=pk1)
event = get_object_or_404(Event, pk=pk2)
return event
class DeleteContactEvent(DeleteView):
model = Event
class EventDetail(DetailView):
template_name = 'crm/eventdetail.html'
model = Event
def get_object(self):
pk1 = self.kwargs['pk1']
pk2 = self.kwargs['pk2']
contact = get_object_or_404(Contact, pk=pk1)
event = get_object_or_404(Event, pk=pk2)
return event
答案 0 :(得分:0)
摆脱错误的一种方法是在联系人模型中定义获取绝对URL
def get_absolute_url(self):
return reverse("contact_detail", kwargs={"pk": self.pk})
答案 1 :(得分:0)
您有一个已保存的Event对象(具有pk),并且您有联系人pk
def get_success_url(self):
return reverse('eventdetail', kwargs={'pk1': self.kwargs['pk1'], 'pk2': self.object.pk})