Мне нужно изменить поля только для чтения внутри django adminModel
в зависимости от условия. Внутри этого режима есть BooleanField. Я хочу проверить, если это значение True
, а затем показать список только для чтения поле. если это ложь, должен показать другой список.
вот мой ModelAdmin
код:
@admin.register(PurchaseRequest)
class PurchaseRequestAdmin(admin.ModelAdmin):
change_form_template = 'prc_custom_change_admin.html'
form = PurchaseRequestForm
ordering = ['-date_solicited']
# list_filter = (StatusFilter,)
autocomplete_fields = [
'project',
'budget',
'company',
'branch',
'location',
'management',
'effort_type'
]
fieldsets = [
('General', {'fields': [
'project',
'budget',
'company',
'etp',
'branch',
# 'region',
# 'management',
'effort_type',
'observations',
'solution_description',
'justifications',
'provisioned_capex',
'contact_information'
]}),
('Status', {'fields': [
'solicitor',
'date_solicited',
'analizer',
'receiver',
'issuer',
'approver',
'date_approval',
]}),
]
readonly_fields = [
'date_solicited',
'solicitor',
'approver',
'date_approval',
]
inlines = [PRCItemInline, ]
list_display = (
'project', 'prc_status', 'check_analizer', 'approval_view', 'issued', 'received', 'installed',
'id', 'budget', 'company', 'branch', 'item_count',
'print_link')
search_fields = ['items__product__product_code__oracle_code', 'branch__name']
list_filter = (
'completed',
'is_received',
'is_approved',
'is_issued',
)
list_per_page = 10
Я использовал get_readonly_fields
, чтобы позволить администратору изменять что-либо:
def get_readonly_fields(self, request, obj=None):
user = request.user
if user.is_superuser:
# Admin can change anything
return self.readonly_fields
return self.readonly_fields # + list(disabled_fields)
, но проблемаявляется то, что мне нужно получить доступ к текущему изменяющемуся объекту, чтобы проверить, что логическое поле имеет значение True. Anyidea, как это сделать?