Django

Code

Ticket #399: bigint_patch_06aug06.txt

File bigint_patch_06aug06.txt, 4.5 kB (added by Gopal Narayanan <gopastro@gmail.com>, 2 years ago)
Line 
1 Index: django/db/models/fields/__init__.py
2 ===================================================================
3 --- django/db/models/fields/__init__.py (revision 3608)
4 +++ django/db/models/fields/__init__.py (working copy)
5 @@ -663,6 +663,14 @@
6      def get_manipulator_field_objs(self):
7          return [forms.IntegerField]
8  
9 +class BigIntegerField(IntegerField):
10 +    def get_manipulator_field_objs(self):
11 +        return [forms.BigIntegerField]
12 +
13 +class PositiveBigIntegerField(IntegerField):
14 +    def get_manipulator_field_objs(self):
15 +        return [forms.PositiveBigIntegerField]   
16 +
17  class IPAddressField(Field):
18      def __init__(self, *args, **kwargs):
19          kwargs['maxlength'] = 15
20 Index: django/db/backends/mysql/introspection.py
21 ===================================================================
22 --- django/db/backends/mysql/introspection.py   (revision 3608)
23 +++ django/db/backends/mysql/introspection.py   (working copy)
24 @@ -82,7 +82,7 @@
25      FIELD_TYPE.FLOAT: 'FloatField',
26      FIELD_TYPE.INT24: 'IntegerField',
27      FIELD_TYPE.LONG: 'IntegerField',
28 -    FIELD_TYPE.LONGLONG: 'IntegerField',
29 +    FIELD_TYPE.LONGLONG: 'BigIntegerField',
30      FIELD_TYPE.SHORT: 'IntegerField',
31      FIELD_TYPE.STRING: 'TextField',
32      FIELD_TYPE.TIMESTAMP: 'DateTimeField',
33 Index: django/db/backends/mysql/creation.py
34 ===================================================================
35 --- django/db/backends/mysql/creation.py        (revision 3608)
36 +++ django/db/backends/mysql/creation.py        (working copy)
37 @@ -14,12 +14,14 @@
38      'FloatField':        'numeric(%(max_digits)s, %(decimal_places)s)',
39      'ImageField':        'varchar(100)',
40      'IntegerField':      'integer',
41 +    'BigIntegerField':   'bigint',
42      'IPAddressField':    'char(15)',
43      'ManyToManyField':   None,
44      'NullBooleanField':  'bool',
45      'OneToOneField':     'integer',
46      'PhoneNumberField':  'varchar(20)',
47      'PositiveIntegerField': 'integer UNSIGNED',
48 +    'PositiveBigIntegerField': 'bigint UNSIGNED',   
49      'PositiveSmallIntegerField': 'smallint UNSIGNED',
50      'SlugField':         'varchar(%(maxlength)s)',
51      'SmallIntegerField': 'smallint',
52 Index: django/forms/__init__.py
53 ===================================================================
54 --- django/forms/__init__.py    (revision 3608)
55 +++ django/forms/__init__.py    (working copy)
56 @@ -738,6 +738,20 @@
57          if not 0 <= int(field_data) <= 32767:
58              raise validators.CriticalValidationError, gettext("Enter a whole number between 0 and 32,767.")
59  
60 +class BigIntegerField(IntegerField):
61 +    def __init__(self, field_name, length=20, maxlength=None, is_required=False, validator_list=None, member_name=None):
62 +        if validator_list is None: validator_list = []
63 +        validator_list = [self.isInteger] + validator_list
64 +        if member_name is not None:
65 +            self.member_name = member_name
66 +        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
67 +
68 +class PositiveBigIntegerField(PositiveIntegerField):
69 +    def __init__(self, field_name, length=20, maxlength=None, is_required=False, validator_list=None):
70 +        if validator_list is None: validator_list = []
71 +        validator_list = [self.isPositive] + validator_list
72 +        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
73 +
74  class FloatField(TextField):
75      def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
76          if validator_list is None: validator_list = []
77 Index: django/contrib/admin/views/doc.py
78 ===================================================================
79 --- django/contrib/admin/views/doc.py   (revision 3608)
80 +++ django/contrib/admin/views/doc.py   (working copy)
81 @@ -289,6 +289,7 @@
82  # If a column type is set to None, it won't be included in the output.
83  DATA_TYPE_MAPPING = {
84      'AutoField'                 : _('Integer'),
85 +    'BigIntegerField'           : _('Integer'),
86      'BooleanField'              : _('Boolean (Either True or False)'),
87      'CharField'                 : _('String (up to %(maxlength)s)'),
88      'CommaSeparatedIntegerField': _('Comma-separated integers'),
89 @@ -306,6 +307,7 @@
90      'NullBooleanField'          : _('Boolean (Either True, False or None)'),
91      'OneToOneField'             : _('Relation to parent model'),
92      'PhoneNumberField'          : _('Phone number'),
93 +    'PositiveBigIntegerField'   : _('Integer'),
94      'PositiveIntegerField'      : _('Integer'),
95      'PositiveSmallIntegerField' : _('Integer'),
96      'SlugField'                 : _('String (up to %(maxlength)s)'),