Whats the best way of excluding fieldsets
, I have been reading different posts like the one's below :
but I couldn't get it working with them. I want to negelect the following fieldsets when it's not superuser :
- Cooperation Partner Settings.
- email_user (This is an Inline not a field set)
Below is the admin.py
code
@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)
EDIT :
This is my current implementation according to the answer @Ozahed,
but it doesn't make fields hidden, whats really missing :
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)