Răsfoiți Sursa

Implement custom DateTimeColumn improving null values handling

Sergio Saucedo 4 ani în urmă
părinte
comite
611f1b57dd
1 a modificat fișierele cu 21 adăugiri și 1 ștergeri
  1. 21 1
      netbox/utilities/tables.py

+ 21 - 1
netbox/utilities/tables.py

@@ -4,10 +4,11 @@ from django.contrib.auth.models import AnonymousUser
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import FieldDoesNotExist
-from django.db.models import DateField
+from django.db.models import DateField, DateTimeField
 from django.db.models.fields.related import RelatedField
 from django.urls import reverse
 from django.utils.safestring import mark_safe
+from django.utils.formats import date_format
 from django_tables2 import RequestConfig
 from django_tables2.columns import library
 from django_tables2.data import TableQuerysetData
@@ -224,6 +225,25 @@ class DateColumn(tables.DateColumn):
             return cls(**kwargs)
 
 
+@library.register
+class DateTimeColumn(tables.DateTimeColumn):
+    """
+    Overrides the default implementation of DateTimeColumn to better handle null values, returning a default value for
+    tables and null when exporting data. It is registered in the tables library to use this class instead of the
+    default, making this behavior consistent in all fields of type DateTimeField.
+    """
+
+    def value(self, value):
+        if value:
+            return date_format(value, format="SHORT_DATETIME_FORMAT")
+        return None
+
+    @classmethod
+    def from_field(cls, field, **kwargs):
+        if isinstance(field, DateTimeField):
+            return cls(**kwargs)
+
+
 class ButtonsColumn(tables.TemplateColumn):
     """
     Render edit, delete, and changelog buttons for an object.