Просмотр исходного кода

Adds hide-if-unset to custom field (#12723)

* adds hide-if-unset to custom field #12597

* moved hide logic from template to python

* fix indentation

* Update logic for omit_hidden under get_custom_fields()

* Update docs

* Account for False values

---------

Co-authored-by: jeremystretch <jstretch@netboxlabs.com>
Abhimanyu Saharan 2 лет назад
Родитель
Сommit
d7ca453f26
3 измененных файлов с 17 добавлено и 8 удалено
  1. 6 5
      docs/models/extras/customfield.md
  2. 2 0
      netbox/extras/choices.py
  3. 9 3
      netbox/netbox/models/features.py

+ 6 - 5
docs/models/extras/customfield.md

@@ -68,11 +68,12 @@ Defines how filters are evaluated against custom field values.
 
 Controls how and whether the custom field is displayed within the NetBox user interface.
 
-| Option     | Description                          |
-|------------|--------------------------------------|
-| Read/write | Display and permit editing (default) |
-| Read-only  | Display field but disallow editing   |
-| Hidden     | Do not display field in the UI       |
+| Option            | Description                                      |
+|-------------------|--------------------------------------------------|
+| Read/write        | Display and permit editing (default)             |
+| Read-only         | Display field but disallow editing               |
+| Hidden            | Do not display field in the UI                   |
+| Hidden (if unset) | Display in the UI only when a value has been set |
 
 ### Default
 

+ 2 - 0
netbox/extras/choices.py

@@ -56,11 +56,13 @@ class CustomFieldVisibilityChoices(ChoiceSet):
     VISIBILITY_READ_WRITE = 'read-write'
     VISIBILITY_READ_ONLY = 'read-only'
     VISIBILITY_HIDDEN = 'hidden'
+    VISIBILITY_HIDDEN_IFUNSET = 'hidden-ifunset'
 
     CHOICES = (
         (VISIBILITY_READ_WRITE, 'Read/Write'),
         (VISIBILITY_READ_ONLY, 'Read-only'),
         (VISIBILITY_HIDDEN, 'Hidden'),
+        (VISIBILITY_HIDDEN_IFUNSET, 'Hidden (if unset)'),
     )
 
 

+ 9 - 3
netbox/netbox/models/features.py

@@ -197,11 +197,15 @@ class CustomFieldsMixin(models.Model):
         data = {}
 
         for field in CustomField.objects.get_for_model(self):
+            value = self.custom_field_data.get(field.name)
+
             # Skip fields that are hidden if 'omit_hidden' is set
-            if omit_hidden and field.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_HIDDEN:
-                continue
+            if omit_hidden:
+                if field.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_HIDDEN:
+                    continue
+                if field.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_HIDDEN_IFUNSET and not value:
+                    continue
 
-            value = self.custom_field_data.get(field.name)
             data[field] = field.deserialize(value)
 
         return data
@@ -227,6 +231,8 @@ class CustomFieldsMixin(models.Model):
 
         for cf in visible_custom_fields:
             value = self.custom_field_data.get(cf.name)
+            if value in (None, []) and cf.ui_visibility == CustomFieldVisibilityChoices.VISIBILITY_HIDDEN_IFUNSET:
+                continue
             value = cf.deserialize(value)
             groups[cf.group_name][cf] = value