Почему мое поле "Дата" не отображается в системе администратора?
В моем файле 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
через администратора после того, как запись была впервые создана?Если вы действительно хотите видеть дату в панели администратора, вы можете добавить
readonly_fields
в admin.py :class RatingAdmin(admin.ModelAdmin): readonly_fields = ('date',) admin.site.register(Rating,RatingAdmin)
Любое указанное вами поле будет добавлено последним после редактируемых полей. Для управления порядком вы можете использовать
fields
опции.Дополнительную информацию можно найти в документации Django .
источник
fields
вы также должны поместить в него свое поле, чтобы оно понадобилось вам как внутри, такreadonly_fields
иfields
иначе поле не будет отображаться.fieldsets
, только что столкнулся с этой проблемой сегодня.auto_now_add=True
в Django 1.9. Временным решением (своего рода) является добавление их вlist_display
кортеж. Изменить: он будет работать, если вы также добавите свое поле,fields
как указано в @BjornTipling.Основной взлом:
Если вам действительно нужно это сделать (как и мне), вы всегда можете обойти это, сразу же установив для поля значение «редактируемое», определив поле следующим образом:
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
источник
from django.utils.timezone import now
вместоdatetime.now
, но это выглядит многообещающим.Возможно, это связано с истинным значением auto_now_add. Возможно, вместо этого параметра для захвата даты при добавлении вы могли бы переопределить метод сохранения модели, чтобы вставить дату и время, когда идентификатор равен нулю.
class Rating(models.Model): .... def save(self, *args, **kwargs) if not self.id: self.date = datetime.datetime.now()
источник
auto_now
не используется иeditable=False
. +1Если вы хотите, чтобы какое-либо поле было видимым в списке всех ваших записей (когда вы нажимаете на модель в админке), а не при открытии этой конкретной записи, тогда -
class RatingAdmin(admin.ModelAdmin): list_display = ('name', 'date') admin.site.register(Rating, RatingAdmin)
«name» - ваше основное поле или любое другое поле, которое вы хотите отобразить в панели администратора.
Таким образом вы можете указать все столбцы, которые хотите видеть.
источник
Вы не можете этого сделать, проверьте документацию
auto_now и auto_now_add - все не редактируемые поля, и вы не можете их переопределить ...
источник