Pod wieloma względami wszystkie rozwiązania tego problemu będą większym problemem niż są warte. Ten kwalifikuje się jako hack. Jest możliwe, że aktualizacja django pozostawi cię wysoko i na sucho, jeśli zmienią sposób implementacji create_update. Dla uproszczenia założę, że próbujesz ustawić domyślnego użytkownika, a nie po cichu zmusić użytkownika do zalogowania się.
Napisz procesor kontekstowego:
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 {}
Co to będzie zrobić, to zastąpić obiekt formularza, który create_update przechodzi do szablonu. Technicznie rzecz biorąc, jest to ponowne utworzenie formularza po wykonaniu domyślnego widoku.
Następnie w adresie URL conf:
url(r'pattern_to_match', 'django.views.generic.create_update.create_object', kwargs={'context_processors':form_user_default})
Znowu musiałem zagłębić się w kodzie źródłowym, aby dowiedzieć się, jak to zrobić. Najlepiej byłoby spróbować napisać własny widok (ale uwzględnić jak najwięcej niestandardowych obiektów Django). Nie ma "prostego domyślnego" sposobu, aby to zrobić, ponieważ w paradygmacie django formy są ściślej związane z warstwą modelu niż z widokami, a tylko widoki mają wiedzę o obiekcie żądania.
Wiem (dzięki w każdym razie;)). Próbuję użyć ogólnego widoku dla tego, więc nie muszę pisać kodu do zapisania nowego obiektu. Kod Django jest dokładnie testowany, więc kiedy tylko jest to możliwe, wolę używać go zamiast własnego kodu. –