summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit7d235c4d2bdffe729608d928b48dc8f647ebe54d (patch)
treeb20ee23a82f76fc63ee99417007d57f310d34ceb
parent9992bf5614ed22b99f0b341b3d4252c8f0c88e06 (diff)
downloadIshtar-7d235c4d2bdffe729608d928b48dc8f647ebe54d.tar.bz2
Ishtar-7d235c4d2bdffe729608d928b48dc8f647ebe54d.zip
Migration to Django 2.2 - fixes
- rel -> remote_field - to -> model - default initialization for historical models
-rw-r--r--ishtar_common/admin.py2
-rw-r--r--ishtar_common/data_importer.py11
-rw-r--r--ishtar_common/models.py11
-rw-r--r--ishtar_common/models_common.py19
-rw-r--r--ishtar_common/models_imports.py9
-rw-r--r--ishtar_common/templatetags/window_field.py5
-rw-r--r--ishtar_common/tests.py2
-rw-r--r--ishtar_common/widgets.py4
-rw-r--r--ishtar_common/wizards.py2
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