[python] DateTimeField가 관리 시스템에 표시되지 않습니다.

내 “날짜”필드가 관리 시스템에 나타나지 않는 이유는 무엇입니까?

내 admin.py 파일에는

from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)

등급 모델에는 다음과 같은 “날짜”라는 필드가 있습니다.

date = models.DateTimeField(editable=True, auto_now_add=True)

그러나 관리 시스템 내에서는 editable로 설정되어 있어도 필드가 표시되지 않습니다.True .

누구든지 아이디어가 있습니까?



답변

나는 이성이 auto_now_add현장에 있다고 믿습니다 .

에서 이 대답 :

auto_now 속성이 설정된 모든 필드는 editable = False를 상속하므로 관리자 패널에 표시되지 않습니다.

또한 문서 에서 언급 :

현재 구현 된대로 auto_now 또는 auto_now_add를 True로 설정하면 필드에 editable = False 및 blank = True가 설정됩니다.

개체가 저장 될 때 현재 날짜 / 시간으로 덮어 쓸 경우 필드를 편집 할 수있는 이유가 없기 때문에 이는 의미가 있습니다.


답변

관리자 패널에서 날짜를보고 싶다면 admin.py를 추가하면 readonly_fields됩니다 .

class RatingAdmin(admin.ModelAdmin):
    readonly_fields = ('date',)

admin.site.register(Rating,RatingAdmin)

지정하는 모든 필드는 편집 가능한 필드 뒤에 마지막으로 추가됩니다. 순서를 제어하려면 다음을 사용할 수 있습니다.fields 옵션을 있습니다.

추가 정보는 Django 문서 에서 사용할 수 있습니다 .


답변

주요 해킹 :

이 작업을 정말로 수행해야하는 경우 (내가하는 것처럼) 다음과 같이 필드를 “편집 가능”하도록 필드를 즉시 설정하여 언제든지 해킹 할 수 있습니다.

class Point(models.Model):
  mystamp=models.DateTimeField("When Created",auto_now_add=True)
  mystamp.editable=True

이렇게하면 필드를 편집 할 수 있으므로 실제로 변경할 수 있습니다. 적어도 mysql 백업 엔진에서는 잘 작동하는 것 같습니다. 다른 백업 저장소가이 데이터를 데이터베이스에서 변경 불가능하게 만들어 편집을 시도 할 때 문제를 일으키는 경우 certian에 대해 말할 수 없으므로 주의해서 사용하십시오 .


답변

특정 요구 사항 및 동작 차이의 뉘앙스에 따라 다음을 수행 할 수 있습니다.

from django.utils.timezone import now

class MyModel(models.Model):
    date = models.DateTimeField(default=now)

기본 필드는 다음과 같이 사용할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/models/fields/#default

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

편집 가능으로 설정되지 않습니다. False


답변

auto_now_add가 true 인 것과 관련이있을 수 있습니다. 추가시 날짜를 캡처하는 매개 변수 대신 모델 저장 메소드를 재정 의하여 ID가 ​​null 일 때 datetime을 삽입 할 수 있습니다.

class Rating(models.Model):

    ....
    def save(self, *args, **kwargs)
        if not self.id:
            self.date = datetime.datetime.now()


답변

특정 항목을 열 때가 아니라 모든 항목 목록 (관리자에서 모델을 클릭 할 때)에 필드를 표시하려면-

class RatingAdmin(admin.ModelAdmin):
    list_display = ('name', 'date')

admin.site.register(Rating, RatingAdmin)

‘이름’은 기본 필드 또는 관리자 패널에 표시하려는 기타 필드입니다.

이 방법으로보고자하는 모든 열을 지정할 수 있습니다.


답변

그렇게 할 수 없습니다. 문서를 확인하십시오.

auto_nowauto_now_add 는 모두 편집 할 수없는 필드이며 재정의 할 수 없습니다.