It sounds like you want to make polymorphic models - queries that
retrieve various types of objects. There's an implementation of this:
https://github.com/bconstantin/django_polymorphic

On Mar 2, 9:07 pm, Craig de Stigter <craig...@gmail.com> wrote:
> I realise everyone's been busy with getting 1.3 ready, but doesn't anyone
> have thoughts on this? It's been two weeks ...
>
> Thanks
> Craig
>
> On Thursday, February 17, 2011 11:08:57 PM UTC+13, Craig de Stigter wrote:
>
> > Hi folks
>
> > Ever since Django started supporting various types of model inheritance
> > I've wondered why it lacks the kind that I would find most useful: python
> > behaviour differentiated based on the value of a field.
>
> > I'll explain with an example. Here's what I'd like to do:
>
> > class Datasource(models.Model):
> >     type = models.ModelTypeField()
> >     uri = models.CharField(max_length=256)
>
> >     # common behavior in the superclass
> >     def __repr__(self):
> >         return u'<%s: %s>' % (self.__class__.__name__, self.uri)
>
> > class HttpDatasource(Datasource):
> >     # custom behaviour in the subclasses
> >     def get_filename(self):
> >         return self.uri.rsplit("/", 1)[-1]
>
> > class ZipfileDatasource(Datasource):
> >     def get_filename(self):
> >         files = zipfile.list(self.uri)
> >         return files[0].rsplit('/', 1)[-1]
>
> > >>> zip = ZipfileDatasource.objects.create(uri="/path/to/foo.zip")
> > >>> uri = UriDatasource.objects.create(uri="http://example.com/foo.txt";)
>
> > >>> Datasource.objects.all()
> > [<ZipfileDatasource: /path/to/foo.zip>, <UriDatasource:
> >http://example.com/foo.txt>]
>
> > >>>ZipfileDatasource.objects.all()
> > [<ZipfileDatasource: /path/to/foo.zip>]
>
> > >>> Datasource.objects.all().values_list('type', flat=True)
> > [u'myapp.models.ZipfileDatasource', u'myapp.models.UriDatasource']
>
> > These are quite similar to proxy models, but vary in their queryset
> > behaviour - the generic Datasource queryset has mixed types and the concrete
> > querysets are always filtered by type.
>
> > This is far more useful than proxy models, since the concrete types of each
> > table are known. It's also better than making an abstract model and
> > subclassing it, because now all the objects are in the same table and you
> > can iterate over them all at once if you want. Adding more types is easy,
> > since there are no schema changes (with abstract models you'd have to add a
> > new table for each type).
>
> > It's possible that proxy models could be extended to do this without
> > breaking existing code. I'm not sure yet.
>
> > I'm thinking of diving into this. Does anyone have any suggestions? Or,
> > perhaps there's a reason why this hasn't been done previously that you more
> > experienced gurus could illuminate?
>
> > Thanks in advance
>
> > Craig de Stigter
> > Maintainer of django-mptt and full time dev at koordinates.com

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

Reply via email to