Расширение 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.