python - 在模型定义中过滤相关模型的问题

标签 python django-models

我正在尝试为我的模型编写一些自定义方法,但出现以下错误:

属性错误:'ForeignRelatedObjectsDescriptor' 对象没有属性 all|filter

当我运行这段代码时会发生这种情况:

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

有没有人对如何使这项工作或我可能缺少的东西有任何建议?我查看了 Django 文档,但它们似乎只涵盖了模型的最基本用途。

模型.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)

最佳答案

改变:

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

到:

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

在所有事件中..

关于python - 在模型定义中过滤相关模型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611340/

相关文章:

python - 通过检查和默认值处理输入数据质量

python - pip install --upgrade 给出相同的警告

python - Django:覆盖模型中的插入、更新、删除

Django localflavor 模型?默认小部件?

django - 我如何从 Django 查询中提取字段名和值

python - resample 在 Pandas 中给出不同的最终日期

python - [Python EVE] : Reading the request parameters values in Python EVE

python - 使用 FFT 进行 2D 场的 3D 数组表示

python - 从函数和前缀字符串在 Django 中创建默认 ID

python - __classcell__传播了RuntimeError : __class__ not set defining 'AbstractBaseUser' as <class 'django.contrib.auth.base_user.Abstract BaseUser' >.