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