Hi Tobias, Peter, everyone
After finding some time to have an initial play around with the Neo and
Django integration, I'm pretty excited.
I discussed bits with Tobias on IRC the other day and we thought that a
quick 'wish list', communicated via this mailinglist, would be useful to
help steer development of the integration.
So, I thought I'd start the ball rolling with some notes I made while
playing around earlier, in no particular order of priority. If anyone
agrees/disagrees, please do join in the discussion. These are all in
addition to the forthcoming features already listed in Tobias's blog post (
http://journal.thobe.org/2009/12/seamless-neo4j-integration-in-django.html
).
- __unicode__ / Python list representations of NodeQuerySets to make it
easier to explore things in the shell.
- Full support for the queryset API. Details are all here
http://docs.djangoproject.com/en/1.1/ref/models/querysets/#ref-models-querysets,
but headline bits incude:
- queryset.filter() on attributes/properties - eg
MyNodeModel.objects.filter(name="baz"). Plus, SQL-like operators, if
possible such as foo__contains="bar", foo__icontains="BAR" and
foo__iexact="Bar" (These calls methods will most likely be
needed for full
Django Admin support anyway, to allow for the in-Admin search
facility, and
I know Tobias already has Admin support on his list)
- queryset.values() method for querysets, to get just certain values
back. This is often used for better ORM performance in Django,
but will it
make much difference in Neo4j?
- queryset.order_by('attribute_name') - again, probably essential for
Django-admin support
- Control over traversals -- this is non-RDBMS-Django ORM functionality,
but am really looking forward to it!
- Support for Managers for models (
http://docs.djangoproject.com/en/1.1/topics/db/managers/#topics-db-managers),
so one can extend a model's standard API methods with custom ones. Indeed,
this seems a neat way to acccess Neo traversals via the Django ORM.
- Typed fields, rather than just Property(), or perhaps better, simply
the facility to specify a custom Django form field for it - eg:
class Member(model.NodeModel):
...
email_address = model.Property(form_field=django.forms.fields.EmailField)
- Support for django.contrib.auth (already on Tobias's list).
Indeed, it'll be very interesting to see how much extra neo4j-python work
might be required when trying to use common pluggable Django (or Pinax
www.pinaxproject.com) apps. Once support for django.contrib.auth is in,
then we'll be able to experiment.
That's the lot for now. Forgive me if this seems too demanding, or if I'm
not appreciating the power of Neo in my request for typed fields, or if I'm
asking for stuff that's already there but I've missed :o)
Hope it helps keep things moving. I'll play with it all more in the coming
week, I hope, and can chip in more as and when required, and would be v
interested to hear opinions from other Djangonauts on this list.
Cheers
Steve
___
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user