36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
"""Mixins for admin models."""
|
|
from django.db.models import ForeignKey
|
|
|
|
|
|
class BaseModelAdminMixin:
|
|
"""
|
|
Class that overridden ModelAdmin and adds to readonly_fields attr
|
|
persisted fields like created_by, modified_by.
|
|
"""
|
|
|
|
_PERSISTENT_READ_ONLY_FIELDS = ['created_by', 'modified_by']
|
|
|
|
def _get_fk_field_names(self, fields: iter):
|
|
"""
|
|
Return an iterable object which contains FK model fields.
|
|
:param fields: iterable
|
|
:return: iterable
|
|
"""
|
|
foreign_key_fields = []
|
|
for field in fields:
|
|
if isinstance(field, ForeignKey):
|
|
foreign_key_fields.append(field.name)
|
|
return foreign_key_fields
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
"""
|
|
Hook for specifying custom readonly fields.
|
|
"""
|
|
_readonly_fields = list(self.readonly_fields)
|
|
fk_field_names = self._get_fk_field_names(self.model._meta.fields)
|
|
|
|
for field_name in fk_field_names:
|
|
if field_name in self._PERSISTENT_READ_ONLY_FIELDS:
|
|
_readonly_fields.append(field_name)
|
|
return tuple(_readonly_fields)
|