DR, Now I have a new problem. When I use this as a related_manager (Report.objects.all()[0].task_set.accomplishments()) it returns all the accomplishments. I've even added the use_for_related_fields=True in the manager. The all() (default) call seems to work fine, but the others done.
Any ideas? 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 -~----------~----~----~----~------~----~------~--~---