I would use this. The one thing I don't see covered in your example is setting flags. I would look at allowing a list or tuple of integers. Using your example:
p = Person(name='John Doe', flags=[PeopleFlags.Male, PeopleFlags.Employed]) - Justin On Dec 4, 5:16 pm, "Craig Kimerer" <[EMAIL PROTECTED]> wrote: > Apologies if this has been asked already and I have missed it in searching, > but is there any interest in taking a patch for a BitmaskField? > > Given the following (albeit stupid) example to show some usages that would > be nice to have on a bitmask field. I should note in the examples below, > the names I have chosen I am not sold on, but work well enough to describe > what is going on in this example. > > class Person(models.Model): > name = models.TextField() > flags = models.BitmaskField() > > class PeopleFlags(object): > NoFlag = 0 > Male = 1 > Female = 2 > Student = 4 > Unemployed = 8 > Employed = 16 > > Example filter API: > > Finding all unemployed students: > Person.objects.filter(flags__all=[PeopleFlags.Unemployed, > PeopleFlags.Student]) > > Finding all females who are students or unemployed > Person.objects.filter(flags__is=PeopleFlags.Female).filter(flags__any=[Peop > leFlags.Student,PeopleFlags.Unemployed]) > > Obviously there are some special cases, like you couldn't use the same logic > if someone wanted to find 'All people with NoFlags'. By default 0 would > have to be special cased for '= 0' instead of '& 0'. > > I dont have the code currently written, but I am willing to put some work > into it if this is a feature that people (other than me) think would be > useful. > > Craig --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---