CreateViewでモデルのユーザー属性にログインユーザーを設定する

formにhiddenでユーザーidを設定しておくのを見たことがあるんですが、それだとhiddenの値を改ざんされる場合があります。

djangoのドキュメントにちゃんとやり方が書いてあって、form_validで行うのが良いようです。

# views.py
from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

    def form_valid(self, form):
        form.instance.created_by = self.request.user
        return super(AuthorCreate, self).form_valid(form)

参考 : Django user HiddenInput vs. saving directly in views with Class Based Views - Stack Overflow
参考 : Form handling with class-based views | Django documentation | Django