Re: Help with #20378 - Reverse join fails when GenericRelation is defined on an abstract model

2013-05-10 Thread Anssi Kääriäinen
On 9 touko, 19:28, Gavin Wahl  wrote:
> I'd like to have a go at fixing this bug, but I'm not sure where to start.
> The problem seems to be that there's only a single instance of the field
> per model, so field.model is always the abstract class. I can't see a way
> to access the concrete class from the field instance. If the field only has
> a reference to the abstract model, which doesn't have a pk, how can it
> calculate join columns for the concrete model?

It can't. The field's model should be the concrete model, but due to
buggy field setup it isn't.

I took a look at altering the way virtual fields are copied from
abstract model to concrete model, but didn't find any easy solution
there. I didn't use too much time investigating this path, so taking
one more look might yield something. Start from
django.db.models.base:ModelBase.__new__() and virtual_fields copying.
Try to somehow end up in a situation where the field's model is the
concrete model.

More likely the solution is going to be found by altering how
GenericRelations are seen by the ORM. Before #19385 GenericRelation
masqueraded as m2m field (which it isn't), now in master it is a
ForeignObject subclass. The basic problem is that generic relation
represents reverse join, while ForeignObject usually represents direct
join. Doing changes in this area is likely going to be somewhat
complex...

 - Anssi

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Help with #20378 - Reverse join fails when GenericRelation is defined on an abstract model

2013-05-09 Thread Gavin Wahl
I'd like to have a go at fixing this bug, but I'm not sure where to start. 
The problem seems to be that there's only a single instance of the field 
per model, so field.model is always the abstract class. I can't see a way 
to access the concrete class from the field instance. If the field only has 
a reference to the abstract model, which doesn't have a pk, how can it 
calculate join columns for the concrete model?

https://code.djangoproject.com/ticket/20378

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.