﻿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
29653	Using GenericRelation.related_query_name through an inherited abstract class crashes	Lauri Kainulainen	Ramiro Morales	"We upgraded a production app from 1.10 to 2.1.0 today and ran into an interesting issue. Our previous models (trimmed for readability):

{{{
class Event(models.Model):
    class Meta:
        ordering = ['time']
    target_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    target_id = models.PositiveIntegerField()
    target = GenericForeignKey('target_type', 'target_id')
    time = models.DateTimeField()

class EventTarget(models.Model):
    class Meta:
        abstract = True
    events = GenericRelation(Event, 'target_id', 'target_type', related_query_name='targets')
    
class WorkOrder(EventTarget):
     [...]
}}}

Worked fine previously, but in Django 2 we got this:
{{{
In [1]: from workorders.models import *

In [2]: e = WorkOrder.objects.first().events.first()

In [3]: e.targets
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-cc5f08905ab7> in <module>()
----> 1 e.targets

AttributeError: 'Event' object has no attribute 'targets'
}}}

If we move the GenericRelation directly inside the model it works:

{{{
[...]
class WorkOrder(models.Model):
    events = GenericRelation(Event, 'target_id', 'target_type', related_query_name='targets')
[...]    
}}}

{{{
In [1]: from workorders.models import *

In [2]: e = WorkOrder.objects.first().events.first()

In [3]: e.targets
Out[3]: <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager at 0x7f5f9df2af60>
}}}"	Bug	closed	contrib.contenttypes	2.1	Release blocker	fixed		robwa	Accepted	1	0	0	0	0	0
