Skip to content

Commit 848c847

Browse files
committed
Add max_length parameter to binaryfield
1 parent 05a3b32 commit 848c847

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

mssql/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
7575
'AutoField': 'int',
7676
'BigAutoField': 'bigint',
7777
'BigIntegerField': 'bigint',
78-
'BinaryField': 'varbinary(max)',
78+
'BinaryField': 'varbinary(%(max_length)s)',
7979
'BooleanField': 'bit',
8080
'CharField': 'nvarchar(%(max_length)s)',
8181
'DateField': 'date',

mssql/functions.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from django.db.models.expressions import Case, Exists, OrderBy, When, Window
1212
from django.db.models.lookups import Lookup, In
1313
from django.db.models import lookups
14+
from django.db.models.fields import BinaryField, Field
15+
from django.core import validators
1416

1517
if VERSION >= (3, 1):
1618
from django.db.models.fields.json import (
@@ -187,6 +189,14 @@ def json_HasKeyLookup(self, compiler, connection):
187189

188190
return sql % tuple(rhs_params), []
189191

192+
def BinaryField_init(self, *args, **kwargs):
193+
# Add max_length option for BinaryField, default to max
194+
kwargs.setdefault('editable', False)
195+
Field.__init__(self, *args, **kwargs)
196+
if self.max_length is not None:
197+
self.validators.append(validators.MaxLengthValidator(self.max_length))
198+
else:
199+
self.max_length = 'max'
190200

191201
ATan2.as_microsoft = sqlserver_atan2
192202
In.split_parameter_list_as_sql = split_parameter_list_as_sql
@@ -200,6 +210,7 @@ def json_HasKeyLookup(self, compiler, connection):
200210
NthValue.as_microsoft = sqlserver_nth_value
201211
Round.as_microsoft = sqlserver_round
202212
Window.as_microsoft = sqlserver_window
213+
BinaryField.__init__ = BinaryField_init
203214

204215
if VERSION >= (3, 2):
205216
Random.as_microsoft = sqlserver_random

testapp/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
'expressions_window.tests.WindowFunctionTests.test_nth_returns_null',
5858
'expressions_window.tests.WindowFunctionTests.test_nthvalue',
5959
'expressions_window.tests.WindowFunctionTests.test_range_n_preceding_and_following',
60+
'field_deconstruction.tests.FieldDeconstructionTests.test_binary_field',
6061
'ordering.tests.OrderingTests.test_orders_nulls_first_on_filtered_subquery',
6162
'queries.test_bulk_update.BulkUpdateNoteTests.test_set_field_to_null',
6263
'get_or_create.tests.UpdateOrCreateTransactionTests.test_creation_in_transaction',

0 commit comments

Comments
 (0)