2011-08-22 19 views
11

Estoy escribiendo mi primera aplicación en Django, y tengo un problema con la vista genérica create_object; En mi urls.py, que tengo:Extendiendo las vistas genéricas de Django

(r'^new$', CreateView.as_view()), 

El problema es que cuando el usuario envía el formulario "nuevo", lo que necesito para manipular los datos que se guardan en la base de datos (que en realidad tenga que añadir el user_id extranjera llave); sin vistas genéricas solía escribir:

form = ClientForm(request.POST) 
    if form.is_valid(): 
     data = form.save(commit=False) 
     data.user = request.user 
     data.save() 
     form.save_m2m() 

en mi opinión (aviso data.user=request.user). He buscado documentos de Django pero no puedo encontrar la forma de hacerlo (tal vez extendiendo la clase CreateView) --algunas veces en The Book solo hay un ejemplo que anula el método get_object de una clase ListView para actualizar un campo last_accessed_date.

+0

Aquí está la "Realización de un trabajo extra", donde se explica que el método get_object podría ser anulado extendiendo la clase [link] (https://docs.djangoproject.com/en/dev/topics/class-based-views/#performing-extra-work) –

Respuesta

20

Usted puede hacer esto reemplazando el get_form método:

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 

EDITAR: Hoy en día me gustaría anular form_valid según Issac Kelly's answer:

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) 
Cuestiones relacionadas