@@ -27,7 +27,7 @@ def test_create_field(self):
2727 )
2828 field .save ()
2929 self .assertIsNotNone (field .id )
30- self .assertEqual (str (field ), "library | book published" )
30+ self .assertEqual (str (field ), "Library | book published" )
3131
3232 def test_metadata (self ):
3333 from .models import Book
@@ -188,3 +188,100 @@ def test_relational_conditions(self):
188188 metadata = book2 .get_metadata_fieldlist ()
189189 fields = {x [1 ]: x for x in metadata }
190190 self .assertIn ("dewey_decimal" , fields )
191+
192+ def test_localisation_dependent_formatting (self ):
193+ from .models import Book
194+ from django .utils import translation
195+ from django .test import override_settings
196+
197+ field = ExtraField (
198+ content_type = self .book_type ,
199+ label = "Publication Date" ,
200+ name = "pub_date" ,
201+ widget = "date" ,
202+ )
203+ field .save ()
204+
205+ book = Book (
206+ name = "Test Book" ,
207+ metadata = {"pub_date" : "2026-02-03" },
208+ )
209+ book .save ()
210+
211+ # Set DJANGO_USER_DEFINED_FIELD_DATE_FORMAT to None to enable locale-aware formatting.
212+ # When None, date_format() respects the active locale's DATE_FORMAT setting.
213+ with override_settings (DJANGO_USER_DEFINED_FIELD_DATE_FORMAT = None ):
214+ # https://github.com/django/django/blob/main/django/conf/locale/en_AU/formats.py
215+ with translation .override ("en-au" ):
216+ metadata = book .get_metadata_fieldlist ()
217+ fields = {x [1 ]: x for x in metadata }
218+ self .assertEqual (fields ["pub_date" ][3 ], "3 Feb 2026" )
219+
220+ # https://github.com/django/django/blob/main/django/conf/locale/en/formats.py
221+ with translation .override ("en-us" ):
222+ metadata = book .get_metadata_fieldlist ()
223+ fields = {x [1 ]: x for x in metadata }
224+ self .assertEqual (fields ["pub_date" ][3 ], "Feb. 3, 2026" )
225+
226+ def test_date_formatting (self ):
227+ from .models import Book
228+ from django .test import override_settings
229+
230+ field = ExtraField (
231+ content_type = self .book_type ,
232+ label = "Publication Date" ,
233+ name = "pub_date" ,
234+ widget = "date" ,
235+ )
236+ field .save ()
237+
238+ book = Book (
239+ name = "Test Book" ,
240+ metadata = {"pub_date" : "2026-02-03" },
241+ )
242+ book .save ()
243+
244+ with override_settings (DJANGO_USER_DEFINED_FIELD_DATE_FORMAT = "d/m/Y" ):
245+ metadata = book .get_metadata_fieldlist ()
246+ fields = {x [1 ]: x for x in metadata }
247+ self .assertEqual (fields ["pub_date" ][3 ], "03/02/2026" )
248+
249+ with override_settings (DJANGO_USER_DEFINED_FIELD_DATE_FORMAT = "Y-m-d" ):
250+ metadata = book .get_metadata_fieldlist ()
251+ fields = {x [1 ]: x for x in metadata }
252+ self .assertEqual (fields ["pub_date" ][3 ], "2026-02-03" )
253+
254+ def test_date_formatting_invalid_date (self ):
255+ from .models import Book
256+
257+ field = ExtraField (
258+ content_type = self .book_type ,
259+ label = "Publication Date" ,
260+ name = "pub_date" ,
261+ widget = "date" ,
262+ )
263+ field .save ()
264+
265+ # book with string date value,
266+ book = Book (
267+ name = "Test Book" ,
268+ metadata = {"pub_date" : "not-a-valid-date" },
269+ )
270+ book .save ()
271+
272+ # Test that invalid date is kept
273+ metadata = book .get_metadata_fieldlist ()
274+ fields = {x [1 ]: x for x in metadata }
275+ self .assertEqual (fields ["pub_date" ][3 ], "not-a-valid-date" )
276+
277+ # book with int date value
278+ book = Book (
279+ name = "Test Book" ,
280+ metadata = {"pub_date" : 1234567890 },
281+ )
282+ book .save ()
283+
284+ # Test that invalid date is kept
285+ metadata = book .get_metadata_fieldlist ()
286+ fields = {x [1 ]: x for x in metadata }
287+ self .assertEqual (fields ["pub_date" ][3 ], 1234567890 )
0 commit comments