Issue #5353
app_label is not set on the models in pulpcore-plugin
Description
If you create a relation (foreign key, onetoone, manytomany) in a plugin to any model redefined in plugin API (pulpcore.plugin.models), the following error occurs:
$ django-admin makemigrations
Traceback (most recent call last):
File "/usr/local/lib/pulp/bin/django-admin", line 11, in <module>
sys.exit(execute_from_command_line())
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/base.py", line 361, in execute
self.check()
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/base.py", line 390, in check
include_deployment_checks=include_deployment_checks,
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/management/base.py", line 377, in _run_checks
return checks.run_checks(**kwargs)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/model_checks.py", line 168, in check_lazy_references
return _check_lazy_references(apps)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/model_checks.py", line 163, in _check_lazy_references
)), key=lambda error: error.msg)
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/model_checks.py", line 162, in <genexpr>
for func in apps._pending_operations[model_key]
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/model_checks.py", line 157, in build_error
return error_fn(model_key, func, args, keywords) if error_fn else None
File "/usr/local/lib/pulp/lib64/python3.6/site-packages/django/core/checks/model_checks.py", line 107, in field_error
'model': '.'.join(model_key),
TypeError: sequence item 0: expected str instance, NoneType found
The reason is that those models are [re]defined in pulpcore-plugin, and have no app_label attached to them. This causes django lazy reference checks to fail at the migration generation time.
The workaround is to import directly from the pulpcore.
from pulpcore.plugin.models import Remote
print(Remote._meta.app_label) # None
from pulpcore.app.models import Remote
print(Remote._meta.app_label) # 'core'
Affected models (basically all models in pulpcore-plugin):
- Content
- ContentGuard
- Remote
- Publisher
Related issues
Associated revisions
History
#1
Updated by ttereshc over 1 year ago
- Subject changed from Django makemigrations fail for realtions to Remote and Publisher from plugin API to Django makemigrations fail for relations to Remote and Publisher from plugin API
#2
Updated by ttereshc over 1 year ago
- Description updated (diff)
#3
Updated by ttereshc over 1 year ago
FWIW, Content
redifined in pulpcore-plugin works fine and it has the app_label.
from pulpcore.plugin.models import Content
print(Content._meta.app_label) # 'core'
Found a reason why Content model seemed to work, it's a bug I guess, filed https://pulp.plan.io/issues/5355
#4
Updated by amacdona@redhat.com over 1 year ago
- Triaged changed from No to Yes
#5
Updated by ttereshc over 1 year ago
- Subject changed from Django makemigrations fail for relations to Remote and Publisher from plugin API to app_label is not set on the models in pulpcore-plugin
- Description updated (diff)
- Sprint/Milestone set to 3.0.0
#6
Updated by ttereshc over 1 year ago
- Related to Issue #5355: Content model redefined in pulpcore-plugin is not the one exposed to Plugin API added
#7
Updated by ttereshc over 1 year ago
- Checklist item Move all the methods for Content, ContentGuard, Remote and Publisher from pulpcore-plugin to pulpcore added
- Checklist item Ensure that plugin API exposes models from pulpcore (update __init__.py of models in pulpcore-plugin) added
#8
Updated by daviddavis over 1 year ago
- Groomed changed from No to Yes
#9
Updated by bmbouter over 1 year ago
- Sprint set to Sprint 60
#10
Updated by fao89 over 1 year ago
- Status changed from NEW to ASSIGNED
- Assignee set to fao89
#11
Updated by fao89 over 1 year ago
Remote needs a DownloaderFactory: https://github.com/pulp/pulpcore-plugin/blob/master/pulpcore/plugin/models/remote.py#L46
should I move it to pulpcore also? https://github.com/pulp/pulpcore-plugin/blob/master/pulpcore/plugin/download/factory.py#L11-L22
#12
Updated by fao89 over 1 year ago
- Status changed from ASSIGNED to POST
#13
Updated by Anonymous over 1 year ago
- Status changed from POST to MODIFIED
Applied in changeset pulpcore|06c7412525c0196169690125eecd63fad3548752.
#14
Updated by bmbouter about 1 year ago
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Please register to edit this issue
Moving method from pulpcore-plugin models
Moving all the methods for: Content, ContentGuard, Remote and Publisher from pulpcore-plugin to pulpcore
closes #5353 https://pulp.plan.io/issues/5353