인프런 커뮤니티 질문&답변

Kamwoo Jang님의 프로필 이미지

작성한 질문수

파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap

blog 앱 만들기; Post 모델 만들기; admin에 추가하기

on_delete must be callabel 이라고 나옵니다.

작성

·

485

3

안녕하세요 on_delete 입력하고 서버를 구동하였는데 TypeError : on_delete must be callabel 에러표시가 나옵니다.

답변 4

13

문제를 해결했습니다.

django v3.0.4 사용중인데~

author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

이와 같이 변경하니 migrate를 수행 후 웹에서 정상으로 보이지 않았던 'author' 정상적으로 나타났습니다.

7

SungYong Lee님의 프로필 이미지
SungYong Lee
지식공유자

안녕하세요. 12월 4일자로 django 3.0 이 발표되었습니다. 그 이후에 django를 설치하셨다면 django 3.0이 설치되었을겁니다. 그 전 버전은 2.2x 버전입니다. 

django 3.0에서 on_delete=true를 더 이상 지원하지 않는 것 같습니다. on_delete=models.CASCADE 로 수정하면 해당 문제는 해결됩니다만, 그 이후로도 몇가지 문제가 발생할 가능성이 있습니다. 

따라서 터미널에서 pip uninstall django 하시고, pip install django==2.2 로 설치하시면 됩니다. 

0

models.py 코딩 냉용~

from django.db import models
from django.contrib.auth.models import User


class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
created = models.DateTimeField()
author = models.ForeignKey(User, on_delete=models.CASCADE)

def __str__(self):
return '{} :: {}'.format(self.title, self.author)

0

위에서 설명한 대로 하였지만...

(venv) λ python manage.py makemigrations blog

You are trying to add a non-nullable field 'author' to post without a default; we can't do that (the database needs something to populate existing rows).

Please select a fix:

 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)

 2) Quit, and let me add a default in models.py

Select an option: