Как отобразить значение там, где его нет в админке Django?
Есть ли djangtastic способ отображения значения по умолчанию в админке, когда его нет? Как 'n/a', но не для того, чтобы сохранить это в базе данных?
Когда я установил все поля в приведенной ниже модели только для чтения в админке, внешний интерфейс выглядит как изображение внизу. Это кажется визуально свернутым, как будто оно должно иметь значение или поле или что-то в этом роде. Если нет простого способа сделать то, что я ищу, то есть ли другое решение, чтобы сделать интерфейс администратора более понятным для пользователя?
class Package(models.Model):
packaging_format = models.CharField(max_length=40)
package_delivery_pattern = models.CharField(max_length=30, blank=True)
package_delivery_comments = models.CharField(max_length=250, blank=True)
package_manifest_filename = models.CharField(max_length=50)
package_description = models.CharField(max_length=250, blank=True)
package_naming_pattern = models.CharField(max_length=50)
Скриншот полей, отображаемых администратором:
1 ответ
Происходит то, что вы на самом деле сохраняете пустую строку ''
в ваших CharFields вместо None
значения (из-за blank=True
). Таким образом, Django-admin показывает строку, которую вы сохранили в БД (в данном случае ничего).
Если вы измените свои CharFields на null=True
вместо blank=True
, вы будете экономить NULL
в вашей базе данных вместо пустой строки. И таким образом, вы получите поведение, которое вы хотите.
РЕДАКТИРОВАТЬ: я знаю, что это решение не рекомендуется (после Django Docs), но это поведение, которое вы хотели. Django-admin просто показывает вам строку в базе данных, которая ''
,
Другое решение, которое приходит мне в голову, - это изменить ModelAdmin для вашего Package
модель, что-то вроде:
class PackageAdmin(admin.ModelAdmin):
readonly_fields = ['show_package_delivery_pattern', ...]
def show_package_delivery_pattern(self, obj):
if obj.package_delivery_pattern:
return obj.package_delivery_pattern
else:
return 'N/A'
# same with all your CharFields..
Начиная с Django 1.9 вы можете использовать empty_value_display
на уровне сайта, модели или поля в админке Django. На уровне модели:
class YourModelAdmin(admin.ModelAdmin):
empty_value_display = '---'