Document의 Mongoengine creation_time 특성
추가하려고 합니다.creation_time
내 문서에 귀속됩니다.다음은 예입니다.
import datetime
class MyModel(mongoengine.Document):
creation_date = mongo.DateTimeField()
modified_date = mongo.DateTimeField(default=datetime.datetime.now)
Django 모델에는 다음과 같은 매개 변수가 내장되어 있습니다.DateTimeField
와 같은 물건add_now
등, 그러나 MongoEngine은 이를 지원하지 않습니다.
이를 위한 최선의 방법은 다음과 같은 것인지 궁금합니다.
m,created = MyModel.objects.get_or_create()
if created:
m.creation_date = datetime.datetime.now()
더 나은, 더 좋은 방법이 있다면요
저장 방법을 재정의할 수 있습니다.
class MyModel(mongoengine.Document):
creation_date = mongo.DateTimeField()
modified_date = mongo.DateTimeField(default=datetime.datetime.now)
def save(self, *args, **kwargs):
if not self.creation_date:
self.creation_date = datetime.datetime.now()
self.modified_date = datetime.datetime.now()
return super(MyModel, self).save(*args, **kwargs)
별도로, 생성 시간은 다음과 같이 스탬프로 표시됩니다._id
속성 - 다음을 수행하는 경우:
YourObject.id.generation_time
날짜 스탬프를 드리겠습니다.
한 가지 좋은 해결책은 단일 신호 처리기를 여러 문서에 재사용하는 것입니다.
class User(Document):
# other fields...
created_at = DateTimeField(required=True, default=datetime.utcnow)
updated_at = DateTimeField(required=True)
class Post(Document):
# other fields...
created_at = DateTimeField(required=True, default=datetime.utcnow)
updated_at = DateTimeField(required=True)
def update_timestamp(sender, document, **kwargs):
document.updated_at = datetime.utcnow()
signals.pre_save.connect(update_timestamp, sender=User)
signals.pre_save.connect(update_timestamp, sender=Post)
예를 들어 고정 값이 아닌 호출 가능을 기본값으로 할당해야 합니다.default=datetime.utcnow
없이.()
이 페이지의 다른 답변 중 일부는 올바르지 않으며 이로 인해 발생할 수 있습니다.created_at
새 문서를 항상 앱이 처음 로드된 시간으로 설정합니다.
또한 항상 UTC 날짜를 저장하는 것이 좋습니다(datetime.utcnow
대신에datetime.now
데이터베이스에 있습니다.
# -*- coding: utf-8 -*-
from mongoengine import *
from mongoengine import signals
from datetime import datetime
class User(Document):
email = StringField(required=True, unique=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)
# audit fields
created_on = DateTimeField(default=datetime.now())
updated_on = DateTimeField(default=datetime.now())
@classmethod
def pre_save(cls, sender, document, **kwargs):
document.updated_on = datetime.now()
signals.pre_save.connect(User.pre_save, sender=User)
제가 선호하는 솔루션은@property
ObjectId에서 추출한 대로 작성 날짜를 반환하는 데코레이터:
@property
def creation_stamp(self):
return self.id.generation_time
문서 집합에서 타임스탬프 필드를 사용하는 경우, 추상 문서를 대신 작성하여 코드를 건조 상태로 유지할 수 있습니다.
from datetime import datetime
from mongoengine import Document
class CreateUpdateDocument(Document):
meta = {
'abstract': True
}
# last updated timestamp
updated_at = DateTimeField(default=datetime.now)
# timestamp of when entry was created
created_at = DateTimeField(default=datetime.now)
def save(self, *args, **kwargs):
if not self.created_at:
self.created_at = datetime.now()
self.updated_at = datetime.now()
return super(CreateUpdateDocument, self).save(*args, **kwargs)
람다 값을 사용해 보십시오.
import datetime
from mongoengine import Document
class MyModel(Document):
creation_date = mongo.DateTimeField()
modified_date = mongo.DateTimeField(default=lambda : datetime.datetime.now())
전통적으로 다음과 같이 설정했습니다.creation_date
에 결석한.datetime.now()
그런 다음 관리 양식에서 필드를 숨겨 사용자가 올바른 값을 덮어쓸 가능성을 제거합니다.코드가 거의 필요하지 않습니다.
Willian이 제안한 대로 저장 방법을 재정의하는 것도 효과적입니다. 프로그램으로 업데이트를 차단할 수 있기 때문입니다.creation_date
업데이트합니다.modfied_date
동시에
설명서에 따라 auto_now_add 매개 변수를 사용할 수 있습니다.
class MyModel(mongoengine.Document):
creation_date = mongo.DateTimeField(auto_now_add = True)
modified_date = mongo.DateTimeField(auto_now = True)
언급URL : https://stackoverflow.com/questions/8098122/mongoengine-creation-time-attribute-in-document
'programing' 카테고리의 다른 글
리포지토리에서 단일 파일 검색 (0) | 2023.07.07 |
---|---|
mongod를 사용하여 날짜를 utc에 저장할 때 시간대 문제를 어떻게 처리합니까? (0) | 2023.07.07 |
스프링 부트 레스트 - 404 구성 방법 - 리소스를 찾을 수 없음 (0) | 2023.07.07 |
날짜를 10분 간격으로 반올림 (0) | 2023.07.07 |
PHP MariaDB PDO 수 중복 값 (0) | 2023.07.07 |