내 “날짜”필드가 관리 시스템에 나타나지 않는 이유는 무엇입니까?
내 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
.
누구든지 아이디어가 있습니까?
답변
답변
관리자 패널에서 날짜를보고 싶다면 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)
‘이름’은 기본 필드 또는 관리자 패널에 표시하려는 기타 필드입니다.
이 방법으로보고자하는 모든 열을 지정할 수 있습니다.