success_url в UpdateView, основанный на переданном значении

Как я могу установитьsuccess_url на основе параметра?
Я действительно хочу вернуться туда, откуда я пришел, а не в какое-то статичное место. В псевдокоде:

url(r'^entry/(?P<pk>\d+)/edit/(?P<category>\d+)',
    UpdateView.as_view(model=Entry, 
                       template_name='generic_form_popup.html',
                       success_url='/category/%(category)')),

Что будет означать: редактировать записьpk и затем вернитесь в «категорию». Здесь запись может быть частью нескольких категорий.

Ответы на вопрос(4)

Решение Вопроса

Создать классMyUpdateView унаследованный отUpdateView и переопределитьget_success_url метод:

class MyUpdateView(UpdateView):
    def get_success_url(self):
        pass #return the appropriate success url

Также мне нравится передавать такие параметры как template_name и model внутри унаследованного представления классов, но не в.as_view() в urls.py

 16 июн. 2012 г., 11:04
Они есть в self.kwargs
 Bryce16 июн. 2012 г., 06:07
Откуда поступают параметры (например, идентификатор и категория)?

Была такая же проблема. Смог получить параматер из self.kwargs, как сказал Дима:

def get_success_url(self):
        if 'slug' in self.kwargs:
            slug = self.kwargs['slug']
        else:
            slug = 'demo'
        return reverse('app_upload', kwargs={'pk': self._id, 'slug': slug})
 06 сент. 2016 г., 19:37
Можно еще упростить использование .get (): slug = self.kwargs.get («slug», «demo»)
 31 авг. 2014 г., 15:13
@JayCrossler - я думаю, что это связано с относительными адресами по сравнению с абсолютными адресами. Начальная косая черта подразумевает, что URL начинается там. Без косой черты он добавляется к предыдущему URL-адресу, как пути unix с помощью команды ls.
 21 янв. 2014 г., 16:34
Это было полезно для меня - хотя мне нужно было убедиться, что слаг начинается с & quot; / & quot; в противном случае я получаю URL-адреса, подобные & quot; / formpage / successurl / successurl / successurl / & quot; это добавляло в конец, а не в начало.

определятьget_absolute_url(self) на вашей модели. пример

class Poll(models.Model):
    question = models.CharField(max_length=100)
    slug = models.SlugField(max_length=50)
    # etc ...

    def get_absolute_url(self):
        return reverse('poll', args=[self.slug])

Если твойPollUpdateView(UpdateView) загружает экземпляр этой модели какobjectпо умолчанию будет искатьget_absolute_url() способ выяснить, куда перенаправить послеPOST, затем

url(r'^polls/(?P<slug>\w+)/, UpdateView.as_view(
    model=Poll, template_name='generic_form_popup.html'),

следует сделать.

 28 февр. 2019 г., 17:10
А в случае CreateView, поскольку экземпляр еще не существует, просто создайте функцию form_valid, такую как: def form_valid (self, form): obj = form.save (commit = False) obj.profile_id = self.request.user. id obj.save () self.success_url = self.model.get_absolute_url (obj)

Почему вы не добавляете «следующий»? параметр вашей формы (шаблона) и поймать его в вашем представлении. Обычной практикой является достижение перенаправления таким способом.

 Bryce16 июн. 2012 г., 06:16
Как я "ловлю" тот? Можете ли вы предоставить код?

Ваш ответ на вопрос