Răsfoiți Sursa

Replaced an explicit vendor check by a feature flag.

Forward-port of c9aedce0 from stable/1.7.x.
Aymeric Augustin 10 ani în urmă
părinte
comite
e071f67b7f

+ 3 - 0
django/db/backends/__init__.py

@@ -591,6 +591,9 @@ class BaseDatabaseFeatures(object):
     # Can the backend introspect an BooleanField, instead of an IntegerField?
     can_introspect_boolean_field = True
 
+    # Can the backend introspect an DecimalField, instead of an FloatField?
+    can_introspect_decimal_field = True
+
     # Can the backend introspect an IPAddressField, instead of an CharField?
     can_introspect_ip_address_field = False
 

+ 1 - 0
django/db/backends/sqlite3/base.py

@@ -105,6 +105,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
     supports_foreign_keys = False
     supports_check_constraints = False
     autocommits_when_autocommit_is_off = True
+    can_introspect_decimal_field = False
     can_introspect_positive_integer_field = True
     can_introspect_small_integer_field = True
     supports_transactions = True

+ 3 - 4
tests/inspectdb/tests.py

@@ -100,13 +100,12 @@ class InspectDBTestCase(TestCase):
             else:
                 assertFieldType('null_bool_field', "models.IntegerField()")
 
-        if connection.vendor == 'sqlite':
-            # Guessed arguments on SQLite, see #5014
+        if connection.features.can_introspect_decimal_field:
+            assertFieldType('decimal_field', "models.DecimalField(max_digits=6, decimal_places=1)")
+        else:       # Guessed arguments on SQLite, see #5014
             assertFieldType('decimal_field', "models.DecimalField(max_digits=10, decimal_places=5)  "
                                              "# max_digits and decimal_places have been guessed, "
                                              "as this database handles decimal fields as float")
-        else:
-            assertFieldType('decimal_field', "models.DecimalField(max_digits=6, decimal_places=1)")
 
         assertFieldType('float_field', "models.FloatField()")