본문 바로가기
python

[python-django] 모델에 작성하는 __str__에 대해서

by 하이바네 2022. 12. 2.
반응형

예를 들어 다음과 같은 모델이 있다면 __str__ 메소드에 대해서 설명을 하고자 한다.

 

class Notice(models.Model):
    class Meta:
        db_table = 'tb_notice'
        # ordering = ('-created_date',)

    title = models.CharField(max_length=254, null=True, blank=True)
    content = models.TextField(blank=True, null=True)
    files = models.FileField()
    written_date = models.DateTimeField(null=True, blank=True)
    writer = models.ForeignKey('user.User', on_delete=models.SET_NULL, null=True, blank=True)
    is_display = models.BooleanField(default=True)
    is_del = models.BooleanField(default=False)
    notice_file = models.ManyToManyField('notice.NoticeFile', blank=True, null=True, related_name='notice_noticeFile')
    
    def __str__(self):
    	return self.title

 

__str__메소드는 Notice 모델로 만들어진 객체를 출력 시킬 경우 나타나게 할 것을 뜻한다.

 

그런데 여기서 주의할 점은 templates 안에서 if문으로 비교를 할 경우이다.

 

예를 들면 아래와 같다.

{% item %}#Notice의 객체이며 title1234를 출력

{% if "title1234" == item %}
<div>Hello</div>
{% endif %}

Notice의 객체를 출력하니 원하는 값이 나오므로 if문에서 비교를 하면 되겠지! 하면은 안 된다.

 

아직 정보를 더 찾아야겠지만 다음과 같은 이유와 추측이 있다

 

1. item은 객체이다

2. item.__str__은 바로 호출되지 않는다. 즉, if문의 비교를 거치고 호출이 되는듯 하다.

 

여기에 대해 오래된 질문글이 있는데 채택되지 않은 답변중 이와 비슷한 답변이 있었다.

 

 

DTL - If statement not comparing to be true... don't know why

I'm currently working on a Django project and I have the current models from django.db import models class Topic(models.Model): def __str__(self): return self.topic_text topic_t...

stackoverflow.com

 

 

728x90

댓글