À bien des égards, toutes les solutions à ce problème seront plus que ce qu'ils valent. Celui-ci se qualifie comme un hack. Il est possible qu'une mise à jour de django vous laisse haut et sec s'ils changent la façon dont create_update est implémenté. Par souci de simplicité, je vais supposer que vous essayez de définir un utilisateur par défaut, ne forcez pas en silence l'utilisateur à être l'utilisateur connecté.
Ecrire un processeur de contexte:
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 {}
Qu'est-ce que cela va faire est passer outre l'objet de formulaire qui create_update passe au modèle. Ce qu'il fait techniquement est de recréer le formulaire après que la vue par défaut l'ait fait.
Ensuite, dans votre url conf:
url(r'pattern_to_match', 'django.views.generic.create_update.create_object', kwargs={'context_processors':form_user_default})
Encore une fois, je devais plonger dans le code source pour savoir comment faire. Il peut être préférable d'essayer d'écrire votre propre vue (mais incorporez autant d'objets personnalisés Django que possible). Il n'y a aucun moyen de le faire « par défaut simple », parce que dans les formes de paradigme django sont plus étroitement liés à la couche de modèle que de vues et vues seulement avoir une connaissance de l'objet de la demande.
Je sais (merci quand même))). Ce que j'essaie de faire est d'utiliser une vue générique pour cela, donc je n'ai pas besoin d'écrire le code pour enregistrer le nouvel objet. Le code de Django est minutieusement testé, donc, quand c'est possible, je préfère l'utiliser à la place de mon propre code. –