【发布时间】:2021-08-12 09:51:46
【问题描述】:
排除fieldsets 的最佳方法是什么,我一直在阅读不同的帖子,如下所示:
但我无法与他们合作。当它不是超级用户时,我想忽略以下字段集:
- 合作伙伴设置。
- email_user(这是一个内联而不是一个字段集)
下面是admin.py代码
@admin.register(CooperationPartner, site=admin_site)
class CooperationPartnerAdmin(model.Admin):
inline_type = 'stacked'
inline_reverse = [(
'email_user',
{'fields': [
'salutation', 'title', 'first_name', 'last_name', 'email',
]},
)]
reverse_delete_user = True
form = CooperationPartnerAdminForm
fieldsets_add = (
(_('Personal Data'), {
'fields': (
'birthday', 'private_address_street',
'private_address_house_n', 'private_address_extra',
'private_address_postcode', 'private_address_city',
),
}),
(_('Cooperation Partner Settings'), {
'fields': (
'pool', 'custom_policy_type', 'custom_database_structure',
'custom_attachments',
)
}),
(_('Company Data'), {
'fields': (
'company', 'legal_form', 'business_address_street',
'business_address_house_n', 'business_address_extra',
'business_address_postcode', 'business_address_city',
'international_prefix', 'phone_number', 'career_position',
'loan_intermediary_permission', 'agreed_provision',
'bank_name', 'iban', 'bic', 'account_holder',
'sepa_direct_debit_mandate', 'status_decision_feedback',
),
}),
)
fieldsets_change = (
(None, {
'fields': (
'cooperation_partner_id', 'account_state',
),
}),
) + fieldsets_add
def get_form(self, request, obj=None, change=False, **kwargs):
"""Overwrite get_form method."""
self.fieldsets = self.fieldsets_change if obj else self.fieldsets_add
return super().get_form(request, obj, change, **kwargs)
编辑:
根据@Ozahed 的回答,这是我目前的实现,
但它不会隐藏字段,真正缺少的是什么:
def get_form(self, request, obj=None, change=False, **kwargs):
"""Overwrite get_form method."""
self.fieldsets = self.fieldsets_change if obj else self.fieldsets_add
form = super().get_form(request, obj, change, **kwargs)
if request.user.is_staff:
list_of_fields_to_hide = ['pool', 'custom_policy_type', 'birthday']
for field_name in list_of_fields_to_hide:
form.base_fields[field_name].is_hidden = True
return super().get_form(request, obj, change, **kwargs)
【问题讨论】:
标签: python django django-admin