Django 1.9 получает kwargs в представлении на основе классов

#python #django #django-views #django-urls

#питон #джанго #django-просмотры #django-url-адреса

Вопрос:

Мне было интересно, есть ли способ получить kwargs непосредственно в представлении на основе классов. Я знаю, что это можно сделать в функциях внутри класса, но у меня возникают проблемы, когда я пытаюсь это сделать:

views.py

 class EmployeesUpdateStudies(UpdateView):
    form_class = form_ES
    model = EmployeePersonal
    template_name = 'employeesControll/employees_studies_update_form.html'
    success_url = reverse('employee-details',  kwargs={'pk': kwargs.get('pk')})
 

Мой URL-адрес выглядит следующим образом

 url(r'^employees/detalles/(?P<pk>[0-9] )/


Ответ №1:

Ответ Аласдэра решает вашу проблему. Однако вы можете определить get_absolute_url метод для вашей EmployeePersonal модели, который будет действовать как success_url для вашего представления:

Вам даже не нужно указывать success_url для CreateView или UpdateView - они будут использоваться get_absolute_url() для объекта модели, если таковые имеются.

Вы будете использовать self.id в get_absolute_url методе для объектов модели первичный ключ.


Ссылка:

Типовые формы

Комментарии:

1. Ваш ответ может помочь мне в некоторых других вещах в моем приложении, спасибо!

Ответ №2:

Вы не можете использовать kwargs in success_url , потому что, когда Django загружает класс при запуске сервера, у него нет доступа к запросу. Вместо этого переопределите этот get_success_url метод.

 def get_success_url(self) 
    return reverse('employee-details', kwargs={'pk': self.kwargs['pk']})
 

Комментарии:

1. Отлично, ты меня спас. Спасибо!

, login_required(views.EmployeeDetails.as_view()), name='employee-details')

Ответ №1:

Ответ Аласдэра решает вашу проблему. Однако вы можете определить get_absolute_url метод для вашей EmployeePersonal модели, который будет действовать как success_url для вашего представления:

Вам даже не нужно указывать success_url для CreateView или UpdateView — они будут использоваться get_absolute_url() для объекта модели, если таковые имеются.

Вы будете использовать self.id в get_absolute_url методе для объектов модели первичный ключ.


Ссылка:

Типовые формы

Комментарии:

1. Ваш ответ может помочь мне в некоторых других вещах в моем приложении, спасибо!

Ответ №2:

Вы не можете использовать kwargs in success_url , потому что, когда Django загружает класс при запуске сервера, у него нет доступа к запросу. Вместо этого переопределите этот get_success_url метод.


Комментарии:

1. Отлично, ты меня спас. Спасибо!