De muchas maneras, todas las soluciones a esto serán más problemas de lo que valen. Este califica como un truco. Es posible que una actualización de django te deje en un estado alto si cambia la forma en que se implementa create_update. Por simplicidad, supondré que está tratando de establecer un usuario predeterminado, no forzar silenciosamente al usuario a ser el usuario que inició sesión.
Escribir un procesador de contexto:
from django.views.generic.create_update import get_model_and_form_class
def form_user_default(request):
if request.method == 'GET':
model, custom_form = get_model_and_form_class(Post,None)
custom_form.author = request.user
return {'form':custom_form}
else: return {}
Lo que esto va a hacer es anular el objeto de formulario que create_update pasa a la plantilla. Lo que está haciendo técnicamente es volver a crear el formulario después de que lo haya hecho la vista predeterminada.
Luego, en su conf url:
url(r'pattern_to_match', 'django.views.generic.create_update.create_object', kwargs={'context_processors':form_user_default})
Una vez más, tuve que profundizar en el código fuente para encontrar la manera de hacer esto. En realidad, es mejor que intentes escribir tu propia vista (pero incorpora tantos objetos personalizados de Django como sea posible). No existe una forma "simple predeterminada" de hacerlo, porque en el paradigma django las formas están más estrechamente vinculadas a la capa modelo que a las vistas, y solo las vistas tienen conocimiento del objeto de solicitud.
Lo sé (gracias de todos modos;)). Lo que trato de hacer es usar una vista genérica para esto, así no tengo que escribir el código para guardar el nuevo objeto. El código de Django se prueba a fondo, así que, siempre que sea posible, prefiero usarlo en lugar de mi propio código. –