반응형
예를 들어 다음과 같은 모델이 있다면 __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문의 비교를 거치고 호출이 되는듯 하다.
여기에 대해 오래된 질문글이 있는데 채택되지 않은 답변중 이와 비슷한 답변이 있었다.
728x90
'python' 카테고리의 다른 글
[python-django]multi databases를 사용하는 방법 (0) | 2022.11.24 |
---|---|
[python-django] logging 활성화 (0) | 2022.11.22 |
[python-django] django의 transaction에 대해서 with atomic (0) | 2022.11.17 |
[python-django]스케쥴러(apschedular 사용) (0) | 2022.11.15 |
[python-django]summernote 설치방법 - extra(Admin에 적용) (0) | 2022.11.04 |
댓글