はこねのはこ

はこねさんの備忘録

Django 2.xx でForeignKeyのon_deleteに関するエラーメモ

はじめに

DjangoGirlsでつまづいたところのメモ。

TypeError: __init__() missing 1 required positional argument: 'on_delete'

が発生した。

その時のコード

class Post(models.Model):
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True,null=True)

    def publid(self):
        self.published_date = timezone.now()
        self.save

    def __str__(self):
        return self.title

環境

原因

ForeignKeyはversion2からは引数としてon_deleteを指定することが必須となっていた。

解決方法

第二引数にon_deleteを渡します。

from django.db import models
from django.utils import timezone

class Post(models.Model):
    author = models.ForeignKey('auth.User',on_delete=models.CASCADE) 
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True,null=True)

参考にさせていただきました

Django2.0から必須になったon_deleteの使い方 - Django2の実力をつけるチュートリアルサイトDjangoBrothers