강의로 돌아가기
김민수

무슨 에러인가요?TypeError: __init__() missing 1 required positional argument: 'on_delete'

poll = models.ForeignKey(Poll,ondelete=models.CASCADE) #Poll 모델의 id를 이용
candidate = models.ForeignKey(Candidate,on
delete=models.CASCADE)

이거를 써서 해결은 했지만 왜 저랑 몇몇 분들만 이런 이유가 나는지 그이유가 궁금하네요.

  • hur-kyuh-leez
    저도 같은 에러가 났어요. 찾아보셔서 알겠지만, 'poll이 없어질경우, poll을 foreign key로 지정한 애들은 다 같이 없애줘라' 이런거 같네요. 장고가 업데이트 되면서 직접 명시적으로 써줘야 되는 거 같습니다. hur-kyuh-leez 2018.07.21 07:12
2 개의 답변
Siwoo Pak

원래 DB에서 다른 테이블에 PK를 FK로 가져왔을 때 PK값을 지우고 싶은 경우 다른 테이블 FK값의 레코드가 먼저 삭제해야 삭제되거든요.
그래서 DB 설계시 on cascade를 써서 PK값이 삭제되면 FK의 레코드도 같이 삭제하는 걸 명시하는데,
위도 그와 관련된 에러같습니다.

하명기

class Choice(models.Model):
poll = models.ForeignKey(Poll,
ondelete=models.CASCADE,)
candidate = models.ForeignKey(Candidate,
on
delete=models.CASCADE,)
votes = models.IntegerField(default=0)

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.