mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #35117 -- Added support for the hectare unit in Area.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							6debeac9e7
						
					
				
				
					commit
					c7e986fc9f
				
			| @@ -347,8 +347,13 @@ class Distance(MeasureBase): | ||||
| class Area(MeasureBase): | ||||
|     STANDARD_UNIT = AREA_PREFIX + Distance.STANDARD_UNIT | ||||
|     # Getting the square units values and the alias dictionary. | ||||
|     UNITS = {"%s%s" % (AREA_PREFIX, k): v**2 for k, v in Distance.UNITS.items()} | ||||
|     ALIAS = {k: "%s%s" % (AREA_PREFIX, v) for k, v in Distance.ALIAS.items()} | ||||
|     UNITS = {"%s%s" % (AREA_PREFIX, k): v**2 for k, v in Distance.UNITS.items()} | { | ||||
|         "ha": 10000, | ||||
|     } | ||||
|     ALIAS = {k: "%s%s" % (AREA_PREFIX, v) for k, v in Distance.ALIAS.items()} | { | ||||
|         "hectare": "ha", | ||||
|     } | ||||
|  | ||||
|     LALIAS = {k.lower(): v for k, v in ALIAS.items()} | ||||
|  | ||||
|     def __truediv__(self, other): | ||||
|   | ||||
| @@ -116,6 +116,19 @@ Unit Attribute                     Full name or alias(es) | ||||
|     For example, ``Area(sq_m=2)`` creates an :class:`Area` object | ||||
|     representing two square meters. | ||||
|  | ||||
| In addition to unit with the ``sq_`` prefix, the following units are also | ||||
| supported on :class:`Area`: | ||||
|  | ||||
| =================================  ======================================== | ||||
| Unit Attribute                     Full name or alias(es) | ||||
| =================================  ======================================== | ||||
| ``ha``                             Hectare | ||||
| =================================  ======================================== | ||||
|  | ||||
| .. versionchanged:: 5.1 | ||||
|  | ||||
|     Support for the ``ha`` unit was added. | ||||
|  | ||||
| Measurement API | ||||
| =============== | ||||
|  | ||||
|   | ||||
| @@ -70,6 +70,8 @@ Minor features | ||||
|   ``metro_code`` and ``region_code``, but the previous keys are also retained | ||||
|   for backward compatibility. | ||||
|  | ||||
| * :class:`~django.contrib.gis.measure.Area` now supports the ``ha`` unit. | ||||
|  | ||||
| :mod:`django.contrib.messages` | ||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
|   | ||||
| @@ -38,6 +38,10 @@ class DistanceTest(SimpleTestCase): | ||||
|         with self.assertRaises(AttributeError): | ||||
|             D(banana=100) | ||||
|  | ||||
|     def test_init_invalid_area_only_units(self): | ||||
|         with self.assertRaises(AttributeError): | ||||
|             D(ha=100) | ||||
|  | ||||
|     def test_access(self): | ||||
|         "Testing access in different units" | ||||
|         d = D(m=100) | ||||
| @@ -294,6 +298,13 @@ class AreaTest(unittest.TestCase): | ||||
|         self.assertEqual(repr(a1), "Area(sq_m=100.0)") | ||||
|         self.assertEqual(repr(a2), "Area(sq_km=3.5)") | ||||
|  | ||||
|     def test_hectare(self): | ||||
|         a = A(sq_m=10000) | ||||
|         self.assertEqual(a.ha, 1) | ||||
|  | ||||
|     def test_hectare_unit_att_name(self): | ||||
|         self.assertEqual(A.unit_attname("Hectare"), "ha") | ||||
|  | ||||
|     def test_hash(self): | ||||
|         a1 = A(sq_m=100) | ||||
|         a2 = A(sq_m=1000000) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user