Quellcode durchsuchen

fix: don't update autoname field when using Document.save (#16436)

version-14
Ankush Menat vor 3 Jahren
committed by GitHub
Ursprung
Commit
046f5d31af
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden GPG-Schlüssel-ID: 4AEE18F83AFDEB23
5 geänderte Dateien mit 28 neuen und 1 gelöschten Zeilen
  1. +1
    -0
      frappe/core/doctype/data_import/importer.py
  2. +8
    -1
      frappe/core/doctype/data_import/test_importer.py
  3. +7
    -0
      frappe/model/base_document.py
  4. +1
    -0
      frappe/model/document.py
  5. +11
    -0
      frappe/tests/test_naming.py

+ 1
- 0
frappe/core/doctype/data_import/importer.py Datei anzeigen

@@ -244,6 +244,7 @@ class Importer:
existing_doc = frappe.get_doc(self.doctype, doc.get(id_field.fieldname))

updated_doc = frappe.get_doc(self.doctype, doc.get(id_field.fieldname))

updated_doc.update(doc)

if get_diff(existing_doc, updated_doc):


+ 8
- 1
frappe/core/doctype/data_import/test_importer.py Datei anzeigen

@@ -92,11 +92,18 @@ class TestImporter(unittest.TestCase):

# update child table id in template date
i.import_file.raw_data[1][4] = existing_doc.table_field_1[0].name
i.import_file.raw_data[1][0] = existing_doc.name

# uppercase to check if autoname field isn't replaced in mariadb
if frappe.db.db_type == "mariadb":
i.import_file.raw_data[1][0] = existing_doc.name.upper()
else:
i.import_file.raw_data[1][0] = existing_doc.name

i.import_file.parse_data_from_template()
i.import_data()

updated_doc = frappe.get_doc(doctype_name, existing_doc.name)
self.assertEqual(existing_doc.title, updated_doc.title)
self.assertEqual(updated_doc.description, 'test description')
self.assertEqual(updated_doc.table_field_1[0].child_title, 'child title')
self.assertEqual(updated_doc.table_field_1[0].name, existing_doc.table_field_1[0].name)


+ 7
- 0
frappe/model/base_document.py Datei anzeigen

@@ -817,6 +817,13 @@ class BaseDocument(object):
elif language == "PythonExpression":
frappe.utils.validate_python_code(code_string, fieldname=field.label)

def _sync_autoname_field(self):
"""Keep autoname field in sync with `name`"""
autoname = self.meta.autoname or ""
_empty, _field_specifier, fieldname = autoname.partition("field:")

if fieldname and self.name and self.name != self.get("fieldname"):
self.set(fieldname, self.name)

def throw_length_exceeded_error(self, df, max_length, value):
# check if parentfield exists (only applicable for child table doctype)


+ 1
- 0
frappe/model/document.py Datei anzeigen

@@ -500,6 +500,7 @@ class Document(BaseDocument):
self._validate_non_negative()
self._validate_length()
self._validate_code_fields()
self._sync_autoname_field()
self._extract_images_from_text_editor()
self._sanitize_content()
self._save_passwords()


+ 11
- 0
frappe/tests/test_naming.py Datei anzeigen

@@ -35,6 +35,17 @@ class TestNaming(unittest.TestCase):
title2 = append_number_if_name_exists('Note', 'Test', 'title', '_')
self.assertEqual(title2, 'Test_1')

def test_field_autoname_name_sync(self):

country = frappe.get_last_doc("Country")
original_name = country.name
country.country_name = "Not a country"
country.save()
country.reload()

self.assertEqual(country.name, original_name)
self.assertEqual(country.name, country.country_name)

def test_format_autoname(self):
'''
Test if braced params are replaced in format autoname


Laden…
Abbrechen
Speichern