From e3501fe77a13ae3ebd125cdc88402321255a5c52 Mon Sep 17 00:00:00 2001 From: tcely Date: Tue, 28 Jan 2025 19:12:56 -0500 Subject: [PATCH 1/2] Fix CommaSepChoiceField Using the separator that was chosen is the biggest fix. --- tubesync/sync/fields.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/tubesync/sync/fields.py b/tubesync/sync/fields.py index 2514c525..f44688b7 100644 --- a/tubesync/sync/fields.py +++ b/tubesync/sync/fields.py @@ -32,24 +32,28 @@ class CustomCheckboxSelectMultiple(CheckboxSelectMultiple): class CommaSepChoiceField(models.Field): "Implements comma-separated storage of lists" + # If 'text' isn't correct add the vendor override here. + _DB_TYPES = {} + def __init__(self, separator=",", possible_choices=(("","")), all_choice="", all_label="All", allow_all=False, *args, **kwargs): - self.separator = separator + super().__init__(*args, **kwargs) + self.separator = str(separator) self.possible_choices = possible_choices self.selected_choices = [] self.allow_all = allow_all self.all_label = all_label self.all_choice = all_choice - super().__init__(*args, **kwargs) def deconstruct(self): name, path, args, kwargs = super().deconstruct() - if self.separator != ",": + if ',' != self.separator: kwargs['separator'] = self.separator kwargs['possible_choices'] = self.possible_choices return name, path, args, kwargs def db_type(self, connection): - return 'text' + value = self._DB_TYPES.get(connection.vendor, None) + return value if value is not None else 'text' def get_my_choices(self): choiceArray = [] @@ -72,21 +76,13 @@ class CommaSepChoiceField(models.Field): 'label': '', 'required': False} defaults.update(kwargs) - #del defaults.required return super().formfield(**defaults) - def deconstruct(self): - name, path, args, kwargs = super().deconstruct() - # Only include kwarg if it's not the default - if self.separator != ",": - kwargs['separator'] = self.separator - return name, path, args, kwargs - def from_db_value(self, value, expr, conn): - if value is None: + if 0 == len(value) or value is None: self.selected_choices = [] else: - self.selected_choices = value.split(",") + self.selected_choices = value.split(self.separator) return self @@ -97,7 +93,7 @@ class CommaSepChoiceField(models.Field): return "" if self.all_choice not in value: - return ",".join(value) + return self.separator.join(value) else: return self.all_choice From 24ac2e1aed486890d9974810dee0c2e87a7ed096 Mon Sep 17 00:00:00 2001 From: tcely Date: Wed, 29 Jan 2025 00:23:02 -0500 Subject: [PATCH 2/2] Field expects verbose_name to be first, not separator --- tubesync/sync/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tubesync/sync/fields.py b/tubesync/sync/fields.py index f44688b7..3a9044f1 100644 --- a/tubesync/sync/fields.py +++ b/tubesync/sync/fields.py @@ -35,7 +35,7 @@ class CommaSepChoiceField(models.Field): # If 'text' isn't correct add the vendor override here. _DB_TYPES = {} - def __init__(self, separator=",", possible_choices=(("","")), all_choice="", all_label="All", allow_all=False, *args, **kwargs): + def __init__(self, *args, separator=",", possible_choices=(("","")), all_choice="", all_label="All", allow_all=False, **kwargs): super().__init__(*args, **kwargs) self.separator = str(separator) self.possible_choices = possible_choices