Hi all - I’ve put a couple of days into completing [model_instance].natural_key() function, natural_key.dependencies list and a [model_class].objects.get_by_natural_key() function. When I invoke with:
python manage.py dumpdata auth accounts bwm_revised criteria_prioritisation dcap info projects prioritisation_info --natural-primary --natural-foreign -
-indent 4 -v 2 --traceback -o a_to_d.json
I get an error trying to when related_descriptors.py tries to use fields/mixins.py which exceeds the recursion depth. The task half-finishes, then throws this error:
[… ]Traceback (most recent call last):
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\fields\related_descriptors.py”, line 174, in get
rel_obj = self.field.get_cached_value(instance)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\fields\mixins.py”, line 16, in get_cached_value
return instance._state.fields_cache[cache_name]
KeyError: ‘from_content’During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “C:\Users\atcra\Coding\KEN_development\manage.py”, line 22, in
execute_from_command_line(sys.argv)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\management_init_.py”, line 419, in execute_from_command_line
utility.execute()
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\management_init_.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\management\base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\management\base.py”, line 398, in execute
output = self.handle(*args, **options)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\management\commands\dumpdata.py”, line 232, in handle
serializers.serialize(
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\serializers_init_.py”, line 129, in serialize
s.serialize(queryset, **options)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\serializers\base.py”, line 110, in serialize
self.handle_fk_field(obj, field)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\core\serializers\python.py”, line 53, in handle_fk_field
related = getattr(obj, field.name)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\fields\related_descriptors.py”, line 188, in get
rel_obj = self.get_object(instance)
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\fields\related_descriptors.py”, line 155, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\query.py”, line 435, in get
raise self.model.DoesNotExist(
info.models.DoesNotExist: Content matching query does not exist.
Exception ignored in: <generator object cursor_iter at 0x0000026EB26A2EB0>
Traceback (most recent call last):
File “C:\Users\atcra\Coding\KEN_development\devenv\lib\site-packages\django\db\models\sql\compiler.py”, line 1649, in cursor_iter
cursor.close()
sqlite3.ProgrammingError: Cannot operate on a closed database.
Django 3.2.4 django.db.models.fields.mixins defines:
class FieldCacheMixin:
“”“Provide an API for working with the model’s fields value cache.”“”def get_cache_name(self): raise NotImplementedError def get_cached_value(self, instance, default=NOT_PROVIDED): # print("get_cached_value, type:", type(instance), 'value:', instance, "\n") cache_name = self.get_cache_name() try: return instance._state.fields_cache[cache_name] except KeyError: if default is NOT_PROVIDED: raise return default
This is the ContentTrace model that has the ‘from_content’ field that couldn’t be found:
class ContentTrace(BaseModelWithTags):
from_content = models.ForeignKey(Content, on_delete=models.CASCADE, related_name=“traces_from”)
to_content = models.ForeignKey(Content, on_delete=models.CASCADE, related_name=“traces_to”)
objects = discrete_manager_factory(“N/A”)
natural_key_fields = (‘from_content__content_type__app_label’,
‘from_content__content_type__model’,
‘from_content__object_id’,
‘to_content__app_label’,
‘to_content__model’,
‘to_content__object_id’)
natural_key_dependencies = [‘defenceinfo.content’,]def __str__(self): return 'from:' + str(self.from_content) + ", to:" + str(self.to_content)
There are no instances of ContentTrace or Content objects at the moment; I don’t believe that could be the problem, but I’m out of ideas.