diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-09-16 10:29:22 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:20:58 +0100 |
commit | ec2fc0e18a490634a2da97a16ac94725c3acdc32 (patch) | |
tree | b20ee23a82f76fc63ee99417007d57f310d34ceb | |
parent | f2f735ed86dd12c37ded45eb0b191b02582c3d08 (diff) | |
download | Ishtar-ec2fc0e18a490634a2da97a16ac94725c3acdc32.tar.bz2 Ishtar-ec2fc0e18a490634a2da97a16ac94725c3acdc32.zip |
Migration to Django 2.2 - fixes
- rel -> remote_field
- to -> model
- default initialization for historical models
-rw-r--r-- | ishtar_common/admin.py | 2 | ||||
-rw-r--r-- | ishtar_common/data_importer.py | 11 | ||||
-rw-r--r-- | ishtar_common/models.py | 11 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 19 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 9 | ||||
-rw-r--r-- | ishtar_common/templatetags/window_field.py | 5 | ||||
-rw-r--r-- | ishtar_common/tests.py | 2 | ||||
-rw-r--r-- | ishtar_common/widgets.py | 4 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 2 |
9 files changed, 41 insertions, 24 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 5953896bd..07750ffe7 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -655,7 +655,7 @@ class ImportActionAdmin(admin.ModelAdmin): value = None elif isinstance(field, ForeignKey): if value: - model = field.rel.to + model = field.remote_field.model if model == ContentType: value = value.split("|") value = ContentType.objects.get(app_label=value[0], diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 633d4cfea..b7653af74 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1659,12 +1659,10 @@ class Importer(object): many_values = data.pop(attribute) model = None - if hasattr(field_object, "rel"): - model = field_object.rel.to + if hasattr(field_object, "remote_field"): + model = field_object.remote_field.model elif hasattr(field_object, "related_model"): model = field_object.related_model - elif hasattr(field_object, "to"): - model = field_object.to elif hasattr(field_object, "model"): model = field_object.model if type(many_values) not in (list, tuple): @@ -1897,12 +1895,13 @@ class Importer(object): # we treat only dict formated values return # put history_modifier for every created item - if "history_modifier" in get_all_field_names(field_object.rel.to): + if "history_modifier" in get_all_field_names(field_object.remote_field.model): data[attribute]["history_modifier"] = self.history_modifier try: c_path.append(attribute) data[attribute], created = self.get_object( - field_object.rel.to, data[attribute].copy(), c_path, idx_line=idx_line + field_object.remote_field.model, data[attribute].copy(), c_path, + idx_line=idx_line ) except ImporterError as msg: self.errors.append((self.idx_line, None, msg)) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b4d6eb0f2..6783a89b5 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -349,8 +349,13 @@ class HistoryModel(models.Model): if not models.endswith(".models"): models += ".models" models = import_module(models) - model = getattr(models, self.__class__.__name__[len("Historical") :]) - related_model = getattr(model, key).rel.model + model = getattr(models, self.__class__.__name__[len("Historical"):]) + field = getattr(model, key) + if hasattr(field, "rel"): + field = field.rel + else: + field = field.remote_field + related_model = field.model return related_model.history_decompress(self.history_m2m[key], create=create) @@ -4325,7 +4330,7 @@ class Document( def get_query_owns(cls, ishtaruser): query_own_list = [] for rel_model in cls.RELATED_MODELS: - klass = getattr(cls, rel_model).rel.related_model + klass = getattr(cls, rel_model).remote_field.related_model q_own_dct = klass._get_query_owns_dicts(ishtaruser) if q_own_dct: query_own_list.append((rel_model + "__", q_own_dct)) diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 66cf0c5e5..196e8a7d7 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -816,9 +816,9 @@ class FullSearch(models.Model): def general_types(cls): for k in get_all_field_names(cls): field = cls._meta.get_field(k) - if not hasattr(field, "rel") or not field.rel: + if not hasattr(field, "remote_field") or not field.remote_field: continue - rel_model = field.rel.to + rel_model = field.remote_field.model if issubclass(rel_model, (GeneralType, HierarchicalType)): yield k @@ -1180,6 +1180,14 @@ class HistoryError(Exception): class HistoricalRecords(BaseHistoricalRecords): + def get_extra_fields(self, model, fields): + extra_fields = super().get_extra_fields(model, fields) + # initialize default empty fields + for key in getattr(model, "HISTORICAL_M2M", []): + extra_fields[key] = "" + extra_fields["documents"] = "" + return extra_fields + def _save_historic( self, manager, @@ -1442,12 +1450,13 @@ class BaseHistorizedItem( setattr(item, k, None) continue try: - val = field.rel.to.objects.get(pk=val) + val = field.remote_field.model.objects.get(pk=val) setattr(item, k, val) except ObjectDoesNotExist: if strict: raise HistoryError( - "The class %s has no pk %d" % (str(field.rel.to), val) + "The class %s has no pk %d" + % (str(field.remote_field.model), val) ) setattr(item, k, None) item.pk = self.pk @@ -2810,7 +2819,7 @@ class GeoItem(models.Model): verbose_name=_("Spatial Reference System"), blank=True, null=True, - on_delete=models.PROTECT + on_delete=models.PROTECT, ) point = models.PointField(_("Point"), blank=True, null=True, dim=3) point_2d = models.PointField(_("Point (2D)"), blank=True, null=True) diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 54409e2c9..e530b54e3 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -339,8 +339,8 @@ def get_associated_model(parent_model, keys): ).format(item, OBJECT_CLS.__name__) ) field = fields[item] - if hasattr(field, "rel") and hasattr(field.rel, "to"): - model = field.rel.to + if hasattr(field, "remote_field") and hasattr(field.remote_field, "model"): + model = field.remote_field.model if type(field) == ModelBase: model = field else: @@ -455,9 +455,10 @@ class ImporterDefaultValues(models.Model): if target not in fields: return field = fields[target] - if not hasattr(field, "rel") or not hasattr(field.rel, "to"): + if not hasattr(field, "remote_field") or not hasattr( + field.remote_field, "model"): return self.value - model = field.rel.to + model = field.remote_field.model # if value is an id try: return model.objects.get(pk=int(self.value)) diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py index 47256aea2..b21f2b9e6 100644 --- a/ishtar_common/templatetags/window_field.py +++ b/ishtar_common/templatetags/window_field.py @@ -106,7 +106,10 @@ def field_multiple_obj(caption, item, attr, li=False, size=None): {'caption': caption, 'data': data, 'li': li, "size": size} ) field = getattr(item.instance.__class__, attr) - rel_model = field.rel.model + if hasattr(field, "remote_field"): + rel_model = field.remote_field.model + else: + rel_model = field.rel.model data = rel_model.history_decompress(item.history_m2m[attr]) t = loader.get_template( 'ishtar/blocks/window_field_flex_historized_multiple.html') diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index fed0ccf58..831eac25d 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -1681,7 +1681,7 @@ class AdminGenTypeTest(TestCase): ) continue elif isinstance(field, ForeignKey): - fmodel = field.rel.to + fmodel = field.remote_field.model try: value = fmodel.objects.get(**{slug_name: row[k]}) except fmodel.DoesNotExist: diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index e444261d9..ddc4eb913 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -1223,8 +1223,8 @@ class DataTable(Select2Media, forms.RadioSelect): if "." in col_name: keys = col_name.split(".") for key in keys: - if hasattr(field, "rel") and field.rel: - field = field.rel.to + if hasattr(field, "remote_field") and field.remote_field: + field = field.remote_field.model try: field = field._meta.get_field(key) field_verbose_name = field.verbose_name diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 2d000e423..1aafef6e7 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -744,7 +744,7 @@ class Wizard(IshtarWizard): m = getattr(self.model, dependant_item) if callable(m): m = m() - model = m.field.rel.to + model = m.field.remote_field.model c_dct = other_objs[dependant_item].copy() if issubclass(model, models.BaseHistorizedItem): c_dct["history_modifier"] = self.request.user |