Edited at

【Django】django.db.utils.IntegrityError: (1048, "Column 'user_id' cannot be null")


はじめに

以下のような形でモデルのフィールドに外部キー(例えばCustomUserオブジェクト)を使っている場合にview.pyから直接save()しようとするとエラーに本タイトルにあるようなエラーが出る。原因は登録すべき外部キーがnullの状態でDBに追加しようとしているためである。


models.py

class Blog(models.Model):

"""ブログモデル"""
class Meta:
# テーブル名を定義
db_table = 'blog'

# テーブルのカラムに対応するフィールドを定義
user = models.ForeignKey('accounts.CustomUser', on_delete=models.CASCADE)



views.py

class BlogView(LoginRequiredMixin, View):

def post(self, request):
"""POSTリクエスト用のメソッド"""
form = BlogForm(request.POST)
form.save()


やり方

外部キーを利用する場合は一度save(commit=False)でコミット登録せずに、追加したい外部キーを追加した後にsave()する。


views.py

class BlogView(LoginRequiredMixin, View):

def post(self, request):
"""POSTリクエスト用のメソッド"""
form = BlogForm(request.POST)

new_blog = form.save(commit=False)
new_blog.user = CustomUser.objects.get(id=request.user.id)
new_blog.save()