Filtering problematic models in model definition

I try to write some native methods for my models, but I get the following error:

Attribute Error: 'ForeignRelatedObjectsDescriptor' object has no attribute all|filter

This happens when I run this code:

  chore = Chore (name = 'Laundry')
 chore.schedule_set.create (week_day = 'monday', time_due = '17: 30: 00 ')
 chore.scheduled ()

Does anyone have any tips on how to do this work or what can I skip? I checked the Django docs, but they seem to cover only the most basic uses of models.

models.py:

  from django.db import models
 from datetime import date, timedelta

 class ChoreManager (models.Manager):
     def by_day (self, week_day):
         if week_day == 'today':
             week_day = date.today (). strftime ("% A")

         chores = self.filter (week_day = week_day)

         if chores.count ()> 0:
             return chores
         else:
             return false

     def today (self):
         return self.by_day (week_day = 'today')

 class Chore (models.Model):
     chores = ChoreManager ()
     name = models.CharField (max_length = 50)
     notes = models.TextField (null = True)

     def scheduled (self, week_day = None):
         if week_day is None:
             schedule_count = Chore.schedule_set.all (). count ()
         else:
             if week_day == 'today':
                 week_day = date.today (). strftime ("% A")

             schedule_count = Chore.schedule_set.filter (week_day = week_day) .count ()

         if schedule_count> 0:
             return true
         else:
             return false

     def times_by_day (self, week_day):
         if self.scheduled () == True:
             if week_day == 'today':
                 week_day = date.today (). strftime ("% A")

             return Chore.schedule_set.filter (week_day = week_day) .values ​​('time_due')
         else:
             return false

 class Schedule (models.Model):
     chore = models.ForeignKey ('Chore')
     week_day = models.CharField (max_length = 9)
     time_due = models.TimeField ()

     def mark_complete (self):
         completed_event = Schedule.completedevent_set.create ()
         completed_event.save ()

     def completed_this_week (self):
         today = date.today ()
         weekstart = today - timedelta (days = today.weekday ())
         weekend = weekstart + timedelta (days = 7, hours = 23, minutes = 59, seconds = 59)

         if Schedule.completedevent_set.filter (datetime_completed__gte = weekstart, datetime_completed__lte = weekend) .count ()> 0:
             return true
         else:
             return false

 class CompletedEvent (models.Model):
     schedule = models.ForeignKey ('Schedule')
     datetime_completed = models.DateTimeField (auto_now_add = True)

+7
source share
1 answer

change:

 schedule_count = Chore.schedule_set.all().count() 

in

 schedule_count = self.schedule_set.all().count() 

in all occurrences.

+11
source

All Articles