Python
Django
備忘録

DjangoのCreateViewでユーザーを外部キーを挿入する方法


やりたいこと

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)


参考

https://stackoverflow.com/questions/10382838/how-to-set-foreignkey-in-createviewa