1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

61 lines
2.0 KiB
Python
Raw Normal View History

2021-09-28 10:44:53 -04:00
from django.contrib.contenttypes.models import ContentType
from extras.models import *
from extras.choices import CustomFieldVisibilityChoices
2021-09-28 10:44:53 -04:00
__all__ = (
'CustomFieldsMixin',
)
class CustomFieldsMixin:
"""
Extend a Form to include custom field support.
Attributes:
model: The model class
2021-09-28 10:44:53 -04:00
"""
model = None
2021-09-28 10:44:53 -04:00
def __init__(self, *args, **kwargs):
2021-12-30 17:03:41 -05:00
self.custom_fields = {}
2021-09-28 10:44:53 -04:00
super().__init__(*args, **kwargs)
self._append_customfield_fields()
def _get_content_type(self):
"""
Return the ContentType of the form's model.
"""
if not getattr(self, 'model', None):
2021-09-28 10:44:53 -04:00
raise NotImplementedError(f"{self.__class__.__name__} must specify a model class.")
return ContentType.objects.get_for_model(self.model)
2022-01-17 11:12:54 -05:00
def _get_custom_fields(self, content_type):
return CustomField.objects.filter(content_types=content_type)
2021-09-28 10:44:53 -04:00
def _get_form_field(self, customfield):
return customfield.to_form_field()
def _append_customfield_fields(self):
"""
Append form fields for all CustomFields assigned to this object type.
"""
2022-01-17 11:12:54 -05:00
for customfield in self._get_custom_fields(self._get_content_type()):
if customfield.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_HIDDEN:
continue
2021-09-28 10:44:53 -04:00
field_name = f'cf_{customfield.name}'
self.fields[field_name] = self._get_form_field(customfield)
if customfield.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_READ_ONLY:
self.fields[field_name].disabled = True
2022-05-24 16:39:05 -04:00
if self.fields[field_name].help_text:
self.fields[field_name].help_text += '<br />'
self.fields[field_name].help_text += '<i class="mdi mdi-alert-circle-outline"></i> ' \
'Field is set to read-only.'
2021-09-28 10:44:53 -04:00
# Annotate the field in the list of CustomField form fields
2021-12-30 17:03:41 -05:00
self.custom_fields[field_name] = customfield