Foreign Key를 갖는 테이블, 바라보는 테이블의 데이터를 가져올 수 있다.
# 유저목록 테이블, 사용자이름과 비밀번호 저장한다.
class User(models.Model):
# PK, unique, AI 자동생성
# 직접 지정 : id = models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)
user_name = models.CharField(max_length=50)
password = models.CharField(max_length=200)
# 지금 User테이블에서 userprofile이 역참조 되고 있다. 사용하기 불편쓰!!..
# User가 Userprofile을 정참조하는것이 데이터 접근 이 용이하다.. 코드도 쉽공
class Meta:
db_table = 'users'
# 유저의 사진과, 자기소개 글이 등록된 테이블 유저테이블의 1:1관계
class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_uniq_id')
# ! related_name은 역참조시 사용, 지정하지 않으면 기본 역참조는 테이블명소문자_set으로 역참조를 찾아간다.
image_url = models.CharField(max_length=300, null=True)
description = models.CharField(max_length=100, null=True)
class Meta:
db_table = 'user_profile'
# 인스타그램 피드 테이블, 유저의 이름, 프로필사진, 댓글 정보를 외부에서 가져와야 한다.
class Feed(models.Model):
user = models.ForeignKey('account.User', on_delete = models.CASCADE, related_name = 'author')
# ? user, user_profile이 1:1일때 굳이 user_profile컬럼을 추가할 필요없다..!
# user_profile = models.ForeignKey('account.UserProfile', on_delete = models.SET_NULL, null = True, related_name = 'avatar')
image_url = models.CharField(max_length = 300, verbose_name = 'image')
content = models.TextField(verbose_name = 'content')
like = models.IntegerField(verbose_name = 'likes', null = True)
comment = models.ManyToManyField('Comment', through = 'FeedComment', related_name = 'feed_comment')
feed = models.ManyToManyField('Feed', through = 'FeedComment', related_name = 'comment_feed')
class Meta:
db_table = 'feeds'
# 내 테이블의 값을 가져오자!
>>> Feed.objects.get(id=1).image_url
# <테이블A>.<테이블A FK인 컬럼A>.<컬럼A가 바라보는 테이블의 컬렴이름>
>>> Feed.user.user_name
blueberry # user_name에 저장된 값이 출력된다.
컬럼명 > 컬럼명을 타고 값을 가져온다