reverse_name

BackEnd_Ash.log·2020년 3월 24일
0
class Post(models.Model):
    author     = models.ForeignKey(settings.AUTH_USER_MODEL , on_delete = models.CASCADE)
    message    = models.TextField()
    photo      = models.ImageField(blank = True , upload_to='instagram/post/%Y%m%d')
    is_public  = models.BooleanField(default=False , verbose_name='공개여부')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f'Custom Post object({self.message})'

    def message_length(self):
        return len(self.message)
    message_length.short_description = '메세지 글자수'

    class Meta:
        ordering = ['-id']

class Comment(models.Model):
    post       = models.ForeignKey('Post' , on_delete = models.CASCADE) # post_id 필드가 생성
    message    = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

하나의 post 에 댓글이 만약에 두개가 있다고 한다면 ,
댓글이라는 녀석이 post 를 바라보고 있을것이다 .

In [21]: post = Post.objects.first()

In [22]: post
Out[22]: <Post: Custom Post object(세번째)>

In [23]: Comment.objects.filter(post__id=3)
Out[23]: <QuerySet [<Comment: Comment object (1)>, <Comment: Comment object (2)>]>

In [24]: Comment.objects.filter(post=post)
Out[24]: <QuerySet [<Comment: Comment object (1)>, <Comment: Comment object (2)>]>

In [25]: post.comment_set.all()
Out[25]: <QuerySet [<Comment: Comment object (1)>, <Comment: Comment object (2)>]>

기존에는
data =Post.objects.get(id=1).prefetch_related('comment_set')
으로 가져와서 post 와 comment 둘다 data 에 담아서 가져왔었지만 ,
만약에 comment 만필요하다고 한다면 그럴필요없이

"모델명소문자_set" 을 하면된다

post = Post.objects.first()

만약에 다른 앱에 같은 이름의 모델이 존재하게 될때는
충돌이 날경우가 생긴다.
그럴경우 reverse_name 을 지정해주거나 변경을 하면 된다.

profile
꾸준함이란 ... ?

0개의 댓글