Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Riot
- 롤
- sort
- 장고
- 스파르타내일배움캠프TIL
- 코딩테스트
- Django
- SQL
- programmers
- 프로그래머스
- git
- API
- 백준
- 알고리즘
- github
- 리그오브레전드
- java
- lol
- python
- 스파르타내일배움캠프
- 파이썬
- 자바
- 그리디알고리즘
- 라이엇
- 그리디
- greedy
- drf
- 내일배움캠프
- 탐욕알고리즘
- 코딩테스트준비
Archives
- Today
- Total
Lina's Toolbox
[Django] IntegrityError at NOT NULL constraint failed: articles_comments.parent_comment_id 본문
스파르타 내일 배움 캠프 AI 웹개발 과정/troubleshooting
[Django] IntegrityError at NOT NULL constraint failed: articles_comments.parent_comment_id
Woolina 2024. 10. 16. 08:31
나를 정말 괴롭혔던 이녀석...
1. Model 확인
아니 분명히 blank=True, null=True로 되어있는데 parent_id의 not null 제약조건에 걸린다고;;
2. views.py 확인
# 예시: parent_comment가 없을 경우 명시적으로 None으로 설정
def create_comment(request, article_id):
article = get_object_or_404(Articles, id=article_id)
parent_comment_id = request.POST.get('parent_comment')
if parent_comment_id:
parent_comment = get_object_or_404(Comments, id=parent_comment_id)
else:
parent_comment = None # 부모 댓글이 없는 경우 None으로 설정
comment = Comments.objects.create(
user=request.user,
article=article,
parent_comment=parent_comment,
content=request.POST.get('content')
)
return redirect('article_detail', article_id=article.id)
계속 저러길래 뷰에도 명시적으로 null을 전달하는 로직을 추가해주었다.
그래도 안됨! ^^ ㅠ
3. serializers.py 확인
# serializers.py
class CommentSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Comments
fields = ['id', 'user', 'content', 'created_at', 'updated_at', 'parent_comment']
def create(self, validated_data):
# 부모 댓글이 없을 때 None 값 허용
parent_comment = validated_data.get('parent_comment', None)
return Comments.objects.create(**validated_data)
create 함수안에 parent_comment 없으면 None 넣게해서, 생성될 때 실행되도록 이 로직도 추가해줬다..
근데도 안됨..
왜??
4. 마이그레이션 확인
python manage.py makemigrations
python manage.py migrate
는 진즉에 했다.. ^^ 분명히 했는데..
not null인데 계속 저렇게 뜨는게 뭔가 이상해서..
분명히 DB문제 같은데 하다가 스키마를 확인해봤더니..엥? 이상했다.
5. 마이그레이션 지우고 다시 ^^
python manage.py migrate articles zero # 'articles' 앱에 대한 모든 마이그레이션을 되돌림
python manage.py migrate # 마이그레이션 다시 적용
결론은 예전에 마이그레이션하는 과정에서 뭔가 꼬인 모양이다.
db테이블을 지우고 다시해야하나? 걱정했는데
관련 앱의 마이그레이션만 지우고 다시 할 수 있었다.
저렇게 하니 해결!!!