#22875: "ValueError: Lookup failed for model referenced by field
app.Model.m2mfield: app.ThroghModel" in simple-self contained M2M setup
----------------------------+--------------------------------------
Reporter: ramiro | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: 1.7-beta-2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+--------------------------------------
Description changed by ramiro:
Old description:
> In a simple `ManyToManyField` with intermediate model setup involving
> three models in the same application:
>
> {{{
> # app_b/models.py
> from django.db import models
>
> class Employee(models.Model):
> name = models.CharField(max_length=30)
>
> class Employer(models.Model):
> name = models.CharField(max_length=30)
> employees = models.ManyToManyField(Employee, through='Employment')
>
> class Employment(models.Model):
> employee = models.ForeignKey(Employee)
> employer = models.ForeignKey(Employer)
> recruiting_date = models.DateField()
> }}}
>
> I'm seeing the following traceback when running `migrate` after the
> initial migration has been created for the app:
>
> {{{
> ~/dtest/dtest002$ rm -rf db.sqlite3 app_b/migrations
>
> ~/dtest/dtest002$ PYTHONPATH=~/django/upstream python ./manage.py
> makemigrations
> No changes detected
>
> ramiro@serverid:~/dtest/dtest002$ PYTHONPATH=~/django/upstream python
> ./manage.py makemigrations app_b
> Migrations for 'app_b':
> 0001_initial.py:
> - Create model Employee
> - Create model Employer
> - Create model Employment
>
> ~/dtest/dtest002$ PYTHONPATH=~/django/upstream python ./manage.py migrate
> Operations to perform:
> Synchronize unmigrated apps: (none)
> Apply all migrations: admin, contenttypes, app_b, auth, sessions
> Synchronizing apps without migrations:
> Creating tables...
> Installing custom SQL...
> Installing indexes...
> Running migrations:
> Applying contenttypes.0001_initial... OK
> Applying auth.0001_initial... OK
> Applying admin.0001_initial... OK
> Applying app_b.0001_initial...Traceback (most recent call last):
> File "./manage.py", line 10, in <module>
> execute_from_command_line(sys.argv)
> File "/home/xxx/django/upstream/django/core/management/__init__.py",
> line 385, in execute_from_command_line
> utility.execute()
> File "/home/xxx/django/upstream/django/core/management/__init__.py",
> line 377, in execute
> self.fetch_command(subcommand).run_from_argv(self.argv)
> File "/home/xxx/django/upstream/django/core/management/base.py", line
> 288, in run_from_argv
> self.execute(*args, **options.__dict__)
> File "/home/xxx/django/upstream/django/core/management/base.py", line
> 337, in execute
> output = self.handle(*args, **options)
> File
> "/home/xxx/django/upstream/django/core/management/commands/migrate.py",
> line 146, in handle
> executor.migrate(targets, plan, fake=options.get("fake", False))
> File "/home/xxx/django/upstream/django/db/migrations/executor.py", line
> 62, in migrate
> self.apply_migration(migration, fake=fake)
> File "/home/xxx/django/upstream/django/db/migrations/executor.py", line
> 96, in apply_migration
> migration.apply(project_state, schema_editor)
> File "/home/xxx/django/upstream/django/db/migrations/migration.py",
> line 107, in apply
> operation.database_forwards(self.app_label, schema_editor,
> project_state, new_state)
> File
> "/home/xxx/django/upstream/django/db/migrations/operations/models.py",
> line 33, in database_forwards
> apps = to_state.render()
> File "/home/xxx/django/upstream/django/db/migrations/state.py", line
> 89, in render
> model=lookup_model,
> ValueError: Lookup failed for model referenced by field
> app_b.Employer.employees: app_b.Employment
> }}}
>
> I'm selecting '1.7/beta-2' as Version but I'm running the latest
> `stable/1.7.x` code:
>
> {{{
> ~/django/upstream$ git log -1
> commit 30d8b95139a1fa3070f3b112115e624ffcf8e555
> Author: Tim Graham <[email protected]>
> Date: Thu Jun 19 11:02:53 2014 -0400
>
> [1.7.x] Added feature for implied null (needed for Firebird backend)
>
> Backport of 1b07781292 from master
> }}}
>
> Initially Employee didn't exist and the m2m relationship was against a
> custom User model.
>
> After that trying to create a minimal setup that reproduces the issue,
> usage of the swappable user model feature was removed and the m2m field
> was re-pointed to standard auth.User, and finally to a local Employee
> model.
New description:
In a simple `ManyToManyField` with intermediate model setup involving
three models in the same application:
{{{
# app_b/models.py
from django.db import models
class Employee(models.Model):
name = models.CharField(max_length=30)
class Employer(models.Model):
name = models.CharField(max_length=30)
employees = models.ManyToManyField(Employee, through='Employment')
class Employment(models.Model):
employee = models.ForeignKey(Employee)
employer = models.ForeignKey(Employer)
recruiting_date = models.DateField()
}}}
I'm seeing the following traceback when running `migrate` after the
initial migration has been created for the app:
{{{
~/dtest/dtest002$ rm -rf db.sqlite3 app_b/migrations
~/dtest/dtest002$ PYTHONPATH=~/django/upstream python ./manage.py
makemigrations
No changes detected
ramiro@serverid:~/dtest/dtest002$ PYTHONPATH=~/django/upstream python
./manage.py makemigrations app_b
Migrations for 'app_b':
0001_initial.py:
- Create model Employee
- Create model Employer
- Create model Employment
~/dtest/dtest002$ PYTHONPATH=~/django/upstream python ./manage.py migrate
Operations to perform:
Synchronize unmigrated apps: (none)
Apply all migrations: admin, contenttypes, app_b, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying app_b.0001_initial...Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/xxx/django/upstream/django/core/management/__init__.py",
line 385, in execute_from_command_line
utility.execute()
File "/home/xxx/django/upstream/django/core/management/__init__.py",
line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/xxx/django/upstream/django/core/management/base.py", line
288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/xxx/django/upstream/django/core/management/base.py", line
337, in execute
output = self.handle(*args, **options)
File
"/home/xxx/django/upstream/django/core/management/commands/migrate.py",
line 146, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "/home/xxx/django/upstream/django/db/migrations/executor.py", line
62, in migrate
self.apply_migration(migration, fake=fake)
File "/home/xxx/django/upstream/django/db/migrations/executor.py", line
96, in apply_migration
migration.apply(project_state, schema_editor)
File "/home/xxx/django/upstream/django/db/migrations/migration.py", line
107, in apply
operation.database_forwards(self.app_label, schema_editor,
project_state, new_state)
File
"/home/xxx/django/upstream/django/db/migrations/operations/models.py",
line 33, in database_forwards
apps = to_state.render()
File "/home/xxx/django/upstream/django/db/migrations/state.py", line 89,
in render
model=lookup_model,
ValueError: Lookup failed for model referenced by field
app_b.Employer.employees: app_b.Employment
}}}
I'm selecting '1.7/beta-2' as Version but I'm running the latest
`stable/1.7.x` code:
{{{
~/django/upstream$ git log -1
commit 30d8b95139a1fa3070f3b112115e624ffcf8e555
Author: Tim Graham <[email protected]>
Date: Thu Jun 19 11:02:53 2014 -0400
[1.7.x] Added feature for implied null (needed for Firebird backend)
Backport of 1b07781292 from master
}}}
Initially Employee didn't exist and the m2m relationship was against a
custom User model.
After that (and when trying to create a minimal setup that reproduces the
issue):
- First usage of the swappable user model feature was removed and the m2m
field was re-pointed to standard auth.User
- And finally to a local Employee model.
In all cases, the same exception was generated.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/22875#comment:1>
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/064.c072903f1162a384bebc6bd207b2529e%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.