فهرست منبع

adds related models count on custom field #12825

Abhimanyu Saharan 2 سال پیش
والد
کامیت
00ebdfe0df
2فایلهای تغییر یافته به همراه35 افزوده شده و 0 حذف شده
  1. 17 0
      netbox/extras/views.py
  2. 18 0
      netbox/templates/extras/customfield.html

+ 17 - 0
netbox/extras/views.py

@@ -43,6 +43,23 @@ class CustomFieldListView(generic.ObjectListView):
 class CustomFieldView(generic.ObjectView):
     queryset = CustomField.objects.all()
 
+    def get_extra_context(self, request, instance):
+        related_models = (
+            # (DataFile.objects.restrict(request.user, 'view').filter(source=instance), 'source_id'),
+        )
+
+        for content_type in instance.content_types.all():
+            related_models += (
+                content_type.model_class().objects.restrict(request.user, 'view').exclude(
+                    Q(**{f'custom_field_data__{instance.name}': ''}) |
+                    Q(**{f'custom_field_data__{instance.name}': None})
+                ),
+            )
+
+        return {
+            'related_models': related_models
+        }
+
 
 @register_model_view(CustomField, 'edit')
 class CustomFieldEditView(generic.ObjectEditView):

+ 18 - 0
netbox/templates/extras/customfield.html

@@ -134,6 +134,24 @@
         </table>
       </div>
     </div>
+    <div class="card">
+      <h5 class="card-header">Related Objects</h5>
+      <ul class="list-group list-group-flush">
+        {% for qs in related_models %}
+          <a class="list-group-item list-group-item-action d-flex justify-content-between">
+            {{ qs.model|meta:"verbose_name_plural"|bettertitle }}
+            {% with count=qs.count %}
+              {% if count %}
+                <span class="badge bg-primary rounded-pill">{{ count }}</span>
+              {% else %}
+                <span class="badge bg-light rounded-pill">&mdash;</span>
+              {% endif %}
+            {% endwith %}
+          </a>
+        {% endfor %}
+      </ul>
+    </div>
+
     {% plugin_right_page object %}
   </div>
 </div>