Django 시간 필드

2235 단어
django의 모델을 만들 때 DateTimeField, DateField, TimeField 세 가지 종류가 날짜 필드를 만들 수 있으며, 그 값은datetime (),date (),time () 세 가지 대상에 대응한다.이 세 필드는 같은 매개 변수를 가지고 있습니다 autonow 및 autonow_dd, 겉으로는 easy처럼 보이지만 실제 사용 중에는 오류가 발생하기 쉬우니 다음은 주의점입니다.
  • DateTimeField.auto_now 이 매개 변수의 기본값은false입니다.true로 설정할 때 이 필드를 저장할 때 현재 시간으로 설정하고 모델을 수정할 때마다 자동으로 업데이트됩니다.따라서 이 매개 변수는'마지막 수정 시간'을 저장해야 하는 장면에서 매우 편리하다.주의해야 할 것은 이 매개 변수를true로 설정할 때 필드의 기본값이 현재 시간임을 간단하게 의미하는 것이 아니라 필드가 현재 시간으로 강제적으로 업데이트되어 프로그램에서 수동으로 필드에 값을 부여할 수 없다는 것이다.만약django가 가지고 있는admin 관리자를 사용한다면 이 필드는admin에서 읽기만 합니다.
  • DateTimeField.auto_now_dd 이 매개 변수의 기본값도 False입니다. True로 설정되면 모델 대상이 처음 만들어졌을 때, 필드의 값을 만들 때의 시간으로 설정하고, 나중에 대상을 수정할 때 필드의 값은 업데이트되지 않습니다.이 속성은 일반적으로 생성 시간이 저장된 장면에서 사용됩니다.및 autonow 유사, autonow_add도 강제성을 가지고 있습니다. 트루로 설정되면 프로그램에서 수동으로 필드에 값을 부여할 수 없고, 관리자에서도 필드가 읽기만 합니다.
  • admin의 날짜 시간 필드 autonow 및 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)
    
  • 어떻게 창설 시간을'기본 현재'로 설정하고 수정할 수 있습니까?실제 장면에서는 대상의 창설 시간이 기본적으로 현재 값으로 설정되기를 원할 뿐만 아니라, 나중에 그것을 수정하기를 원한다.어떻게 이런 수요를 실현합니까?

  • 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
    

    html 페이지가 데이터베이스에서 DateTimeField 필드를 읽을 때 표시되는 시간 형식과 데이터베이스에 저장된 형식이 일치하지 않습니다. 예를 들어 데이터베이스 필드의 내용은 2016-06-03 13:00:00이지만 페이지는 Apr. 03, 2016, 1 p.m입니다. 페이지와 데이터베이스에 일치하는 것을 나타내기 위해 페이지 포맷 시간이 필요합니다. {{{infor.updatetime |date: "Y-m-d H:i:s"}와 유사한 필터를 추가해야 합니다.페이지를 새로 고치면 정상적으로 표시됩니다.

    좋은 웹페이지 즐겨찾기