#24201: order_with_respect_to GenericForeignKey
----------------------------------------------+--------------------
Reporter: AlexHill | Owner: nobody
Type: New feature | Status: new
Component: Database layer (models, ORM) | Version:
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
As of 1.8, order_with_respect_to nearly works with generic relations.
First thing that's broken is the `get_RELATED_order` and
`set_RELATED_order` methods. They are set in
[[https://github.com/django/django/blob/d450af8a2687ca2e90a8790eb567f9a25ebce85b/django/db/models/base.py#L320|ModelBase._prepare]].
You don't know what model is going to be on the other end of the
GenericForeignKey, so I think those can simply be omitted if
`opts.order_with_respect_to.rel` is `None`. (Perhaps something can be done
here in cases where a `GenericRelation` is defined.)
Next, you run into trouble
[https://github.com/django/django/blob/d450af8a2687ca2e90a8790eb567f9a25ebce85b/django/db/models/base.py#L796
when Django tries to save a new object's _order field], because there's no
`attname` attribute on the `GenericForeignKey`. You run into the same
problem in `_get_next_or_previous_in_order()`.
This is easily solved if you're OK with sprinkling details of the
GenericForeignKey implementation in Django core: you can just try
`attname`, and if that fails, filter on GFK's `ct_field` and `pk_field`.
But maybe a better idea would be to introduce a method on field-like
things returning a dictionary of filter parameters matching a given
object, or else a property returning a sequence of (filter name, attribute
name) pairs from which the filter parameters can be constructed. In the
latter case, regular fields would return `((self.name, self.attname),)`,
and GFKs would return `((self.fk_field, self.fk_field), (self.ct_field,
self.ct_field))`.
--
Ticket URL: <https://code.djangoproject.com/ticket/24201>
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/051.e8b65dc5851103a37093e479b56e1ccc%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.