LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-16

はじめに

以下のような形でモデルのフィールドに外部キー(例えば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()
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1