django: DateTimeField 현재 시간 설정

2011 단어
자세히 보기
django의 모델을 만들 때 DateTimeField, DateField, TimeField 세 가지 종류가 날짜 필드를 만들 수 있으며, 그 값은datetime (),date (),time () 세 가지 대상에 대응한다.이 세 필드는 같은 매개 변수를 가지고 있습니다 autonow 및 autonow_add.
 
1.DateTimeField.auto_now
이 매개 변수의 기본값은false입니다.true로 설정되었을 때, 이 필드를 저장할 때 현재 시간으로 설정하고, 모델을 수정할 때마다 자동으로 업데이트됩니다.따라서 이 매개 변수는'마지막 수정 시간'을 저장해야 하는 장면에서 매우 편리하다.주의해야 할 것은 이 매개 변수를true로 설정할 때 필드의 기본값이 현재 시간임을 간단하게 의미하는 것이 아니라 필드가 현재 시간으로 강제적으로 업데이트되어 프로그램에서 수동으로 필드에 값을 부여할 수 없다는 것이다.만약django가 가지고 있는admin 관리자를 사용한다면 이 필드는admin에서 읽기만 합니다.
 
2.DateTimeField.auto_now_add
이 매개 변수의 기본값도 False입니다. True로 설정하면 모델 대상이 처음 만들어졌을 때, 필드의 값을 만들 때의 시간으로 설정하고, 나중에 대상을 수정할 때 필드의 값은 다시 업데이트되지 않습니다.이 속성은 일반적으로 생성 시간이 저장된 장면에서 사용됩니다.및 autonow 유사, autonow_add도 강제성을 가지고 있습니다. 트루로 설정되면 프로그램에서 수동으로 필드에 값을 부여할 수 없고, 관리자에서도 필드가 읽기만 합니다.
 
3. admin의 날짜 시간 필드
auto_now 및 autonow_dd가 True로 설정된 후, 이렇게 하면 필드가 editable=False와 blank=True의 상태가 됩니다.editable=False는 필드가 관리자에 나타나지 않도록 하고 blank=Ture는 폼에 값을 입력하지 않도록 합니다.이 때 관리자의fields나fieldset에 이 날짜 시간 필드를 강제로 추가하면 프로그램이 잘못되어admin을 열 수 없습니다.admin에서 대상을 수정할 때 날짜와 시간을 보려면 날짜 시간 필드를 admin 클래스의readonly 에 추가할 수 있습니다fields:
class YourAdmin(admin.ModelAdmin):
    readonly_fields = ('save_date', 'mod_date',)
admin.site.register(Tag, YourAdmin)

 
4. 작성 시간을 기본 현재로 설정하고 수정할 수 있는 방법
그럼 문제 나왔습니다.실제 장면에서는 대상의 창설 시간이 기본적으로 현재 값으로 설정되기를 원할 뿐만 아니라, 나중에 그것을 수정하기를 원한다.어떻게 이런 수요를 실현합니까?
django의 모든 모델 필드는default 인자를 가지고 있으며 필드에 기본값을 설정합니다.default=timezone.now로 auto 대체now=True 또는 autonow_add=True.timezone.now 대응django.utils.timezone.now (). 따라서 다음과 같은 형식으로 작성해야 합니다.
from django.db import models
	import django.utils.timezone as timezone
	class Doc(models.Model):
	    add_date = models.DateTimeField('    ',default = timezone.now)
	    mod_date = models.DateTimeField('      ', auto_now = True)

 
 

좋은 웹페이지 즐겨찾기