장고로 데이터베이스 테이블을 생성하던 중 몇가지 이슈를 발견했다.
먼저 테이블 생성을 하려면 models.py 파일에 class로 선언해줘야 한다.
(데이터베이스는 MySQL을 사용함)
class user(models.Model):
userkey = models.CharField(primary_key=True, max_length=20)
username = models.CharField(max_length=30)
class article(models.Model):
articleNo = models.IntegerField(primary_key=True)
userkey = models.ForeignKey('user', on_delete=models.CASCADE, db_column='userkey')
content = models.CharField(max_length=500)
likeCount = models.IntegerField()
commentCount = models.IntegerField()
date = models.DateTimeField(auto_now_add=True)
class comment(models.Model):
articleNo = models.ForeignKey('article', on_delete=models.CASCADE)
content = models.CharField(max_length=500)
userkey = models.ForeignKey('user', on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
class like(models.Model):
articleNo = models.ForeignKey('article', on_delete=models.CASCADE)
userkey = models.ForeignKey('user', on_delete=models.CASCADE)
현재 만들고 있는 시스템 중 하나에서 사용할 테이블 구조들이다.
Foreign Key를 통해 여러개를 연결시켜줬다.
위 소스를 보면 알겠지만 장고에서 외래키를 선언할 때는
컬럼명 = models.ForeignKey('참조할 클래스명', 옵션)
이렇게 주면 된다.
근데 처음에는 참조할 컬럼명을 명시해주지 않아서 뭔가 싶었는데 어차피 테이블에서
Primary key는 하나니까 그냥 클래스명만 주면 알아서 해당 클래스에서 선언한 Primary Key를 참조시키는 것 같다.
튼, 저렇게 하고 migrate시키면 예상과는 조금 다른 결과가 나온다.
이런식으로 기본컬럼명_id라고 붙어버리는 것이다.
이건 장고 공식문서에 나와있는 바로는 원래 저렇게 나오는거라고 한다.
근데 난 저런 이름 대신 내가 원래 지정했던 컬럼명을 사용하고 싶다.
그럴때는 옵션으로 db_column='컬럼명' 이렇게 해주면 된다.
예를 들어 아래와 같은 라인이 있다고 생각해보자.
userkey = models.ForeignKey('user', on_delete=models.CASCADE)
이렇게 하고 생성해버리면 userkey컬럼이 아닌 userkey_id라는 컬럼이 생성된다.
따라서 아래와 같이 해줘야 한다.
userkey = models.ForeignKey('user', on_delete=models.CASCADE, db_column='userkey')
아, 그리고 desc 테이블명 해서 테이블 명세를 살펴보면 Key 부분에 MUL이라고 나오는데
원래 외부키 설정하면 MUL이라고 나오는 것 같음.
'Coding > Python' 카테고리의 다른 글
Django Restframework 특정 컬럼만 출력하는 방법 (0) | 2018.02.15 |
---|---|
Django Rest framework 다른 테이블 Join 시키는 방법 (0) | 2018.02.06 |
Python3 requests SSL 오류 해결 방법 (0) | 2018.02.03 |
장고(Django) Restframework 인증 권한 설정 방법 (0) | 2018.01.10 |
장고(Django) Restframework로 REST API 만드는 방법 (0) | 2018.01.09 |