diff options
| -rw-r--r-- | ishtar_common/admin.py | 22 | ||||
| -rw-r--r-- | ishtar_common/models.py | 11 | ||||
| -rw-r--r-- | ishtar_common/models_imports.py | 3 | ||||
| -rw-r--r-- | ishtar_common/serializers_utils.py | 1 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 11 | 
5 files changed, 39 insertions, 9 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 86a9af8e8..3e388d615 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -193,6 +193,8 @@ def export_as_csv_action(                      value = ""                  elif isinstance(value, ContentType):                      value = f"{value.app_label}|{value.model}" +                elif hasattr(value, "natural_key"): +                    value = "||".join(value.natural_key())                  else:                      value = str(value)                  row.append(value) @@ -203,6 +205,7 @@ def export_as_csv_action(      export_as_csv.short_description = description      return export_as_csv +  def export_as_geojson_action(      geometry_field,      description=_("Export selected as GeoJSON file"), @@ -664,6 +667,14 @@ class ImportActionAdmin(admin.ModelAdmin):                                      value = value.split("|")                                      value = ContentType.objects.get(app_label=value[0],                                                                      model=value[1]) +                                elif "||" in value: +                                    try: +                                        value = model.objects.get_by_natural_key( +                                            *value.split("||") +                                        ) +                                    except model.DoesNotExist: +                                        missing_parent.append(row.pop(k)) +                                        break                                  else:                                      for slug_col2 in self.import_keys:                                          try: @@ -1790,7 +1801,13 @@ class JsonDataFieldForm(JsonContentTypeFormMixin, forms.ModelForm):          exclude = [] -class JsonDataFieldAdmin(ImportActionAdmin): +serialize_json_action = serialize_action( +    "types", [models.JsonDataSection, models.JsonDataField] +) +serialize_json_action.short_description = SERIALIZE_DESC + + +class JsonDataFieldAdmin(ImportActionAdmin, ImportJSONActionAdmin):      import_keys = ["key"]      list_display = [          "name", @@ -1803,9 +1820,10 @@ class JsonDataFieldAdmin(ImportActionAdmin):          "section",      ]      actions = [ +        export_as_csv_action(), +        serialize_json_action,          change_value("display", True, _("Display selected")),          change_value("display", False, _("Hide selected")), -        export_as_csv_action(),      ]      list_filter = ["value_type", "search_index"]      form = JsonDataFieldForm diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 81fc4c069..9c139086b 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -689,8 +689,8 @@ class JsonDataSection(models.Model):      objects = JsonDataSectionManager()      class Meta: -        verbose_name = _("Json data - Menu") -        verbose_name_plural = _("Json data - Menus") +        verbose_name = _("Custom data - Menu") +        verbose_name_plural = _("Custom data - Menus")          ordering = ["order", "name"]          unique_together = ("name", "content_type") @@ -743,7 +743,8 @@ class JsonDataField(models.Model):      order = models.IntegerField(_("Order"), default=10)      search_index = models.BooleanField(_("Use in search indexes"), default=False)      section = models.ForeignKey( -        JsonDataSection, blank=True, null=True, on_delete=models.SET_NULL +        JsonDataSection, blank=True, null=True, on_delete=models.SET_NULL, +        related_name="json_data_field",      )      custom_forms = models.ManyToManyField(          "CustomForm", blank=True, through="CustomFormJsonField" @@ -751,8 +752,8 @@ class JsonDataField(models.Model):      objects = JsonDataFieldManager()      class Meta: -        verbose_name = _("Json data - Field") -        verbose_name_plural = _("Json data - Fields") +        verbose_name = _("Custom data - Field") +        verbose_name_plural = _("Custom data - Fields")          ordering = ["order", "name"]          unique_together = ("content_type", "key") diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index c85533268..5cf672877 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -1124,7 +1124,8 @@ class Import(models.Model):          "IshtarUser", blank=True, null=True, on_delete=models.SET_NULL      )      name = models.CharField(_("Name"), max_length=500, null=True) -    importer_type = models.ForeignKey(ImporterType, on_delete=models.CASCADE) +    importer_type = models.ForeignKey(ImporterType, on_delete=models.CASCADE, +                                      verbose_name=_("Importer type"))      imported_file = models.FileField(          _("Imported file"),          upload_to="upload/imports/%Y/%m/", diff --git a/ishtar_common/serializers_utils.py b/ishtar_common/serializers_utils.py index 1a526cfff..eefbfd681 100644 --- a/ishtar_common/serializers_utils.py +++ b/ishtar_common/serializers_utils.py @@ -114,6 +114,7 @@ def archive_serialization(  GENERIC_QUERYSET_FILTER = { +    "JsonDataSection": {"JsonDataField": "json_data_field__pk__in"},      "Regexp": {"ImporterType": "columns__importer_type__pk__in"},      "ImporterModel": {          "ImporterType": [ diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index e3af9024f..1ddc94cb2 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -1552,7 +1552,7 @@ class AdminGenTypeTest(TestCase):          models.Format,          models.SupportType,      ] -    models_with_data = gen_models + [models.ImporterModel] +    models_with_data = gen_models + [models.ImporterModel, models.JsonDataField]      models = models_with_data      module_name = "ishtar_common"      ishtar_apps = [ @@ -1569,6 +1569,14 @@ class AdminGenTypeTest(TestCase):          "ishtar_common.ProfileTypeSummary",      ] +    def extra_setup_data(self): +        models.JsonDataField.objects.create( +            name="Extra data", +            content_type=ContentType.objects.get(model="operation"), +            key="extra_data", +            value_type="T" +        ) +      def setUp(self):          self.password = "mypassword"          self.username = "myuser" @@ -1579,6 +1587,7 @@ class AdminGenTypeTest(TestCase):          user.save()          self.client = Client()          self.client.login(username=self.username, password=self.password) +        self.extra_setup_data()      def test_listing_and_detail(self):          models = [] | 
