Currently there are at least 4 open tickets [1-4] that propose the addition 
of new lookup types. Two of them [1,2] are in DDN because of backward 
compatibility concerns.
Following that (IMHO valid) logic makes it impossible to _ever_ add new 
lookup types to django without breaking backwards compatibility since field 
lookup types and field names share the same namespace.

Interestingly there has been one instance [5] where a lookup type was added 
after the 1.0 release (as far as I could gather from SVN). Why no backward 
comp. concerns were voiced in that case is not clear from the ticket.

Also there is currently no validation preventing field names from clashing 
with the already existing lookup types (date, year, month, day, etc. are 
IMHO "easy targets"). Whether that would be a desirable feature to have is 
also debatable since it would "artificially" limit a developers naming 
choices.
That using conflicting field names usually causes no problems but blows up 
with a rather confusing error message (e.g. "TypeError: Related Field has 
invalid lookup: [...]") when querying for that field through a relation 
without an explicit lookup isn't helpful either.

To solve this situation I think there are two possibilities:

   1. Make the current implementation "smarter": Don't automatically assume 
   that the last filter part is a lookup type but instead check first if there 
   is a field of that name.
   2. Separate the field name and lookup namespaces:
   Either change the separator for lookup types (e.g. to 3 underscores) or 
   introduce a completely different way of specifying lookups (e.g. 
   Thing.objects.filter(some_field__other_field=lookups.Contains("blah")))
   
Option one clearly is far less invasive (and possible to implement short 
term) but has the potential of user / developer confusion and maybe some 
hard-to-get-right edge cases.
Option two is a big hammer and possibly (probably?) not something the core 
devs are willing to change even in the long term?

So what do people think?

Bye Ulrich

[1] http://code.djangoproject.com/ticket/8424
[2] http://code.djangoproject.com/ticket/9596
[3] http://code.djangoproject.com/ticket/10911
[4] http://code.djangoproject.com/ticket/12489
[5] http://code.djangoproject.com/changeset/9818

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

Reply via email to