Dave,

Thanks for the quick reply, yea, I figured out what I needed to do,
which turns out just what you said.

I will change to the pythonic way of doing things, thanks.

John

On Nov 7, 11:47 am, Daniel Roseman <[EMAIL PROTECTED]>
wrote:
> On Nov 7, 7:13 pm, John M <[EMAIL PROTECTED]> wrote:
>
>
>
> > I wanted to get some feedback on how I'm using custom model managers.
>
> > I've put all my queries into one manager, each in a different method.
> > Is this the right way to go?
>
> > So for example:
>
> > CHOICES_TASK = (
> >                         ("NO", "None"),
> >                         ("GR", "Green"),
> >                         ("YL", "Yellow"),
> >                         ("RD", "Red"),
> >                 )
>
> > class TaskManager(models.Manager):
> >         use_for_related_fields = True
>
> >         # Task.objects.all()
> >         def get_query_set(self):
> >                 return super(TaskManager, self).get_query_set()
>
> >         # Task.milestones()
> >         def Milestones(self):
> >                 return super(TaskManager,
> > self).get_query_set().filter(milestone=True)
>
> >         def Accomplishments(self):
> >                 return super(TaskManager,
> > self).get_query_set().filter(milestone=False).filter(completed=True)
>
> >         def Nextsteps(self):
> >                 return super(TaskManager,
> > self).get_query_set().filter(milestone=False).filter(completed=False)
>
> > class Task(models.Model):
> >         report = models.ForeignKey(Report)
> >         name = models.CharField(max_length=50)
> >         started = models.BooleanField(default=False)
> >         status = models.CharField(max_length=20, choices=CHOICES_TASK,
> > default="NO")
> >         completed = models.BooleanField(default=False)
> >         duedate = models.DateField(blank=True, null=True)
> >         milestone = models.BooleanField(default=False)
>
> >         # Managers
> >         objects = TaskManager()
> >         milestones = TaskManager().Milestones
> >         accomplishments = TaskManager().Accomplishments
> >         nextsteps = TaskManager().Nextsteps
>
> >         def __unicode__(self):
> >                 return self.name
>
> There's nothing wrong with the general idea - that's how I do it
> myself, although the official docs say to use multiple managers and
> override get_query_set on each one. A couple of comments on your
> implementation though:
>
> 1. There's no point in defining a get_query_set model simply to pass
> to super. If you don't define it at all, it will just inherit from the
> parent class anyway, which is exactly the same as what happens in your
> version, so you may as well save two lines of code.
>
> 2. The convention in Python/Django is to have all lower case names for
> functions and methods - so it should be milestones, accomplishments,
> etc.
>
> 3. I don't think there's any point in defining all the extra manager
> attributes that you have. Leave objects as TaskManager, then you can
> do things like:
> Task.objects.milestones()
> Task.objects.accomplishments().filter(started=False)
> or whatever.
>
> --
> DR.
--~--~---------~--~----~------------~-------~--~----~
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