Django: привяжите два перенаправления к одной кнопке Update в зависимости от того, откуда пришел пользователь
Итак, у меня есть довольно обычная страница "обновления элемента", которая представляет собой представление на основе класса, наследующего UpdateView. (в views.py это выглядит как "class ItemUpdateView(UpdateView) и у него определен метод get_success_url(self), который содержит url перенаправления, куда пользователь попадет после нажатия кнопки "Обновить". Моя проблема в том, что в моем приложении есть две разные страницы, которые могут привести меня на эту страницу "Update item", и в зависимости от того, с какой страницы пришел пользователь - я хочу перевести пользователя обратно либо на страницуА, либо на страницуВ после успешного обновления элемента. Я не смог найти нигде в интернете лучших практик того, как это сделать, поэтому - буду очень признателен за помощь. Я предполагаю, что мне нужно создать дополнительный параметр, который будет частью url и будет содержать A или B в зависимости от страницыA или страницыB, с которой пришел пользователь, т.е. сам url будет иметь вид '/itemUpdate/int:pk/sourcepage' => '/itemUpdate/45/A'. Похоже ли это на правильный подход или есть лучший способ?
Есть лучший способ, который позволяет проверить Meta словарь в запросе:
запишите в вашем views файле:
class ItemUpdateView(UpdateView):
previous_url = ''
def get(self, request, *args, **kwargs):
self.previous_url = request.META.get('HTTP_REFERER')
print(self.previous_url)
return super().get(request, *args, **kwargs)
def get_initial(self):
initial = super().get_initial()
initial['success_url'] = self.previous_url
return initial
def get_success_url(self):
return super().get_form().instance.success_url #if you have ModelForm
и затем напишите hidden field в вашей форме и назовите ее success_url
.
но я не знаю, используете ли вы modelform или form
class YourForm(forms.ModelForm):
success_url = forms.URLField(widget=forms.HiddenInput)
# other fields
ссылка на документы