やりたいこと
Djangoで以下のようなmodelとformがあってCreateViewを使いたい。
author_idはuserテーブルのidと外部キーになっているので作成時に現在ログイン中のuser_idを作成時に挿入したい。
models.py
class Post(models.Model):
postid = models.AutoField(primary_key=True)
author = models.ForeignKey(
'accounts.User', on_delete=models.SET_NULL, null=True)
picture = models.ImageField(
upload_to="image/posts/", blank=True, null=True)
text = models.TextField(blank=True)
forms.py
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ("picture", "text")
解決策
stackoverflowに良さそうな解決方法があった。
formのバリデーション実行時に現在ログイン中のidを差し込んで返す。
class New(generic.edit.CreateView):
template_name = 'post/new.html'
form_class = PostForm
def form_valid(self, form):
form.instance.author_id = self.request.user.id
return super(New, self).form_valid(form)