On Mon, Jun 30, 2008 at 11:32 AM, Alex Rades <[EMAIL PROTECTED]> wrote:

> Hi,
> In the admin site (using latest newforms-admin), it seems not possible to
> sort a table by a ForeignKey which is blank=True, null=True.
> See this little example:
>
> class Group(models.Model):
>     name = models.CharField(max_length=200, primary_key=True)
>
> class Person(models.Model):
>     name = models.CharField(max_length=200, primary_key=True)
>     group = models.ForeignKey(Group, blank=True, null=True)
>
> Is there a valid reason for this limitation? At least on pgsql sorting by a
> nullable field is perfectly valid.


Looking at the source code history, the lines of code that prevent null=True
ForeignKey columns in a change list table from being sortable appears to
have been there since the dawn of time.  So it's an old restriction with no
ticket to refer to to see why it was added.

However, I know that prior to queryset-refactor ordering by foreign key
fields was notoriously fragile.  I think you needed to ensure
select_related() was used on the QuerySet to force the join to the related
table, but select_related() would not follow null=True ForeignKeys so trying
to oder by a null=True ForeignKey probably just did not work or possibly
dropped results from the list due to an inner join being used.  As recently
as last week there were still problems with this exact scenario (see
http://code.djangoproject.com/ticket/7181).

Assuming all such problems have all been fixed now, though, it would seem
this restriction could be removed from admin.  I did some experimenting and
if I remove the code in admin that prevents such sorting, everything seems
to work.  I tried with sqlite, mysql, and postgres backends and included
records with null values in my tests.

Anyone else know any reason why this restriction should be maintained?  So
far as I can tell if the base queryset code now supports this kind of
ordering admin ought to take advantage of it?

Karen

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to