Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

SQLite3와 PostgreSQL created_at과 modified_at 시간 질문드립니다.

3 years, 4 months ago

jinioji jinioji

안녕하세요.

SQLite3 상에서 코멘트 작성 시에는 created_at 과 modified_at 이 마이크로 시간까지 동일하게 저장되는데요...

SQLite3




PostgreSQL 상에서는 마이크로 시간이 서로 다르게 저장 됩니다.

그러한 이유로 인해서 PostgreSQL 상에서는 코멘트 최초 등록 시에도 Updated 시간이 표시되는 현상이 있습니다.

PostgreSQL




DB에 저장된 시간에서 초까지만 추출해서 created_at과 modified_at을 서로 비교해 보려 하였지만

잘 되질 않네요...ㅠ.ㅠ


질문 1 : 저장할 때 초 단위까지만 저장할 수 있나요?

질문 2 : 마이크로 시간 제외하고 초 단위까지만 비교하는 방법이 있나요?


감사합니다.


taegon
taegon   3 years, 4 months ago

안녕하세요.

게시판에서 활발히 활동하시면서, 답변을 달아주셔서 감사합니다.

현재 created_at 필드와 modified_at 필드를 비교하여 동일한 값일 경우, 새 글로 판단해서, 작성시간을 출력하지 않고(혹은 작성시간이라고 출력하고), 수정이 되었을 때는 modified_at 필드 값을 이용하여 "Updated: 시간"으로 표시하고 싶으신 것 같습니다.

어떤 방식으로 코드를 작성하신지 모르겠지만, 일단 댓글을 다 불러온 상황에서 출력부분만 만지는 것으로 이해가 됩니다. 장고의 DateTimeField는 파이썬의 datetime 오브젝트와 거의 동일하게 동작하기 때문에, Post 혹은 Comment 모델에서 두 변수의 차를 구하면 됩니다. 아래와 같이 코드를 이용하시면, 초단위로 차이가 나옵니다. 예를 들어, 1초 이하일 경우, 신규 작성된 글이라고 판단하시면 되지 않을까 싶네요.

delta_time = (modified_at - created_at).seconds

1번 질문 같은 경우는, 현재처럼 DateTime 필드에 정확한 정보를 저장하고, 이용할 때 초단위로 변환해서 이용하시는 편이 더 나을 것 같습니다. date 객체(날짜만 저장)와 datetime 객체(날짜와 시간저장) 정도 구분해서 이용할 수 있으나, 초단위 혹은 분단위 이하를 없앨때는 새로운 객체를 이용하기 보다는 datetime 객체에 초를 0으로 셋팅(분단위 이하 무시)하거나, 초단위의 소수점을 버리고 저장(초단위 저장)하는 방식으로 이용하는 것이 일반적이라고 봅니다.

고맙습니다.

Updated: July 15, 2021, 2 p.m.

jinioji
jinioji   3 years, 4 months ago

안녕하세요.

조언해 주신 대로 models.py의 Comment 클래스에 함수를 추가해 created_at과 modified_at의 초 단위 시간차를 구한 다음 화면단에서 해당 값이 0이 아닌 경우만 표시하게 변경했습니다.

model.py

class Comment(models.Model):
   ... 생략 ...

def get_delta_time(self): # 추가
delta_time = (self.modified_at - self.created_at).seconds
return delta_time


post_detail.html

{% if comment.created_at != comment.modified_at %}

  ↓ 변경 

{% if comment.get_delta_time %}


감사합니다.

Updated: July 16, 2021, 2:43 p.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A