#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.

Reply via email to