Невозможно отобразить несколько полей, доступных для чтения, в админке Django, отображается только одно поле
Я пытаюсь отобразить две новые строки (поля) в разделе "posts" в django admin, которые являются полями только для чтения, которые берут данные из двух других столбцов базы данных. Мой код работает, но он не создает два новых поля, а отображает только одно.
Я относительно новичок в Django и python, и я изо всех сил пытаюсь понять, как это сделать. Я потратил слишком много времени, пробуя разные вещи, но безрезультатно.
В контексте моего теста я хочу видеть два поля с доступом для чтения под названием "New row 1" и "New row 2", которые берут данные из двух столбцов базы данных под названием "est_completion_time" и "downtime". На выходе я могу увидеть только "Новая строка 2".
Вот мой код в файле admin.py:
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
form = JBForm
exclude = ['est_completion_time'] # hide this database column
exclude = ['downtime'] # hide this database column
readonly_fields = ['placeholder_1'] # display this one
readonly_fields = ['placeholder_2'] # display this one
@admin.display(description="New row 1")
def placeholder_1(self, obj):
return obj.est_completion_time # a new readonly field which should display contents of 'est_completion_time' column
@admin.display(description='New row 2')
def placeholder_2(self, obj):
return obj.downtime # a new readonly field which should display contents of 'downtime' column
После прочтения документации я не смог найти решение:
https://docs.djangoproject.com/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets
https://docs.djangoproject.com/en/4.0/ref/contrib/admin/actions/
Любая помощь будет очень признательна.
Я считаю, что вам нужно указать excluded
и readonly_fields
один раз.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
form = JBForm
exclude = ["est_completion_time", "downtime"]
readonly_fields = ["placeholder_1", "placeholder_2"] # display these two
@admin.display(description="New row 1")
def placeholder_1(self, obj):
return obj.est_completion_time
@admin.display(description="New row 2")
def placeholder_2(self, obj):
return obj.downtime