﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
22850	False reverse accessor clash with inherited classes	Ilya Semenov	nobody	"Consider the following `models.py`:

{{{#!python
class Base(models.Model):
	field1 = models.IntegerField()

class Derived(Base):
	field2 = models.IntegerField()
	
class Pointer(models.Model):
	base = models.ForeignKey(Base)
	derived = models.ForeignKey(Derived)
}}}

it crashes:

{{{
Unhandled exception in thread started by <function wrapper at 0x105daab90>
Traceback (most recent call last):
  File ""/Users/semenov/work/project/venv/src/django/django/utils/autoreload.py"", line 170, in wrapper
    fn(*args, **kwargs)
  File ""/Users/semenov/work/project/venv/src/django/django/core/management/commands/runserver.py"", line 104, in inner_run
    self.validate(display_num_errors=True)
  File ""/Users/semenov/work/project/venv/src/django/django/core/management/base.py"", line 361, in validate
    return self.check(app_configs=app_configs, display_num_errors=display_num_errors)
  File ""/Users/semenov/work/project/venv/src/django/django/core/management/base.py"", line 413, in check
    raise CommandError(msg)
django.core.management.base.CommandError: System check identified some issues:

ERRORS:
project.Pointer.derived: (fields.E304) Reverse accessor for 'Pointer.derived' clashes with reverse accessor for 'Pointer.base'.
	HINT: Add or change a related_name argument to the definition for 'Pointer.derived' or 'Pointer.base'.
}}}

However, if I rewrite it to the semantically equivalent form:

{{{#!python
class AbstractBase(models.Model):
	field1 = models.IntegerField()
	class Meta:
		abstract = True

class Base(AbstractBase):
	pass

class Derived(AbstractBase):
	field2 = models.IntegerField()
	
class Pointer(models.Model):
	base = models.ForeignKey(Base)
	derived = models.ForeignKey(Derived)
}}}

it works fine.

'''EXPECTED RESULT''': both cases should work identically (create identical database tables and ORM accessors)."	Uncategorized	closed	Database layer (models, ORM)	1.4	Normal	invalid			Unreviewed	0	0	0	0	0	0
