#25292: doesn't handle an error properly in ManyToManyField.through_fields
--------------------------------------+--------------------
Reporter: thbarrons | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Uncategorized | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+--------------------
'''version 1.8 doesn't handle an error properly in
ManyToManyField.through_fields and gives useless feedback when performing
system checks'''
I made a typo in defining a many to many through field in a model. See
below. In my ManyToManyField.through_field for "Stage" I have
"StageCatgeory" which is not correct the e and g are backwards.
See the stack trace below when running in v 1.8.4. it provides this
useless info... '''AttributeError: 'str' object has no attribute
'_meta'.'''
It wasn't until I tried running my app in 1.7.10, stack trace also below,
that I got useful feedback on the problem and was able to solve it.
'''Field specifies a many-to-many relation through model 'StageCatgeory',
which has not been installed.'''
This seems like a bug that 1.7 handled it and 1.8 did not.
{{{
class Stage(models.Model):
stage_id = models.AutoField(primary_key=True)
categories = models.ManyToManyField('Category',
through='StageCatgeory', related_name="stage_category")
class StageCategory(models.Model):
stage = models.ForeignKey('Stage', db_column='stage_id')
category = models.ForeignKey('Category', db_column='category_id')
class Category(models.Model):
category_id = models.AutoField(primary_key=True)
stage = models.ManyToManyField('Stage', through='StageCategory',
related_name="stage_category")
}}}
{{{
Django version 1.8.4, using settings 'my.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Performing system checks...
Unhandled exception in thread started by <function
check_errors.<locals>.wrapper at 0x102cbad90>
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/core/management/commands/runserver.py", line 110, in
inner_run
self.validate(display_num_errors=True)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/core/management/base.py", line 468, in validate
return self.check(app_configs=app_configs,
display_num_errors=display_num_errors)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/core/management/base.py", line 481, in check
include_deployment_checks=include_deployment_checks,
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/core/checks/registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/core/checks/model_checks.py", line 28, in
check_all_models
errors.extend(model.check(**kwargs))
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/db/models/base.py", line 1207, in check
errors.extend(cls._check_long_column_names())
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/site-packages/django/db/models/base.py", line 1648, in
_check_long_column_names
for m2m in f.rel.through._meta.local_fields:
AttributeError: 'str' object has no attribute '_meta'
}}}
{{{
Django version 1.7.10, using settings 'my.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Performing system checks...
Unhandled exception in thread started by <function wrapper at 0x103de3cf8>
Traceback (most recent call last):
File "/Users/me/virtualEnvs/myV2.7/lib/python2.7/site-
packages/django/utils/autoreload.py", line 222, in wrapper
fn(*args, **kwargs)
File "/Users/me/virtualEnvs/myV2.7/lib/python2.7/site-
packages/django/core/management/commands/runserver.py", line 105, in
inner_run
self.validate(display_num_errors=True)
File "/Users/me/virtualEnvs/myV2.7/lib/python2.7/site-
packages/django/core/management/base.py", line 362, in validate
return self.check(app_configs=app_configs,
display_num_errors=display_num_errors)
File "/Users/me/virtualEnvs/myV2.7/lib/python2.7/site-
packages/django/core/management/base.py", line 414, in check
raise CommandError(msg)
django.core.management.base.CommandError: System check identified some
issues:
ERRORS:
main.Stage.categories: (fields.E331) Field specifies a many-to-many
relation through model 'StageCatgeory', which has not been installed.
System check identified 1 issue (0 silenced).
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/25292>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.828a7492c7c1a4d993ad7d802c16ac6a%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.