Расширение Django Generic Views
Я пишу свое первое приложение в Django, и у меня проблема с create_object
Generic View; В моем urls.py
у меня есть:
(r'^new$', CreateView.as_view()),
Проблема заключается в том, что когда пользователь отправляет "новую" форму, мне нужно манипулировать данными, которые будут сохранены в базе данных (мне действительно нужно добавить внешний ключ user_id
); без общих представлений Я писал:
form = ClientForm(request.POST)
if form.is_valid():
data = form.save(commit=False)
data.user = request.user
data.save()
form.save_m2m()
на мой взгляд (уведомление data.user=request.user
). Я искал документы Django, но я не могу найти способ сделать это (возможно, расширив класс CreateView
) - в книге есть только пример, который переопределяет метод get_object
класса ListView
для обновления поля last_accessed_date
.
Ответы
Ответ 1
Вы можете сделать это, переопределив метод get_form
:
from django.views.generic import CreateView
class CustomCreateView(CreateView):
def get_form(self, form_class):
form = super(CustomCreateView, self).get_form(form_class)
form.instance.user = self.request.user
return form
EDIT: в настоящее время я бы переопределил form_valid
в соответствии с Ответ Issac Kelly:
from django.views.generic import CreateView
class CustomCreateView(CreateView):
def form_valid(self, form):
form.instance.user = self.request.user
return super(CustomCreateView, self).form_valid(form)
Ответ 2
Вы хотите переопределить метод form_valid
.