0

Django 1.9、Python 3.6、postgres 数据库

存在CalendarCalendarOwner,其中多对多关系在 中定义Calendar

class Calendar(models.Model):
    ...
    calendar_owners = models.ManyToManyField(
        'some_app.CalendarOwner',
        blank=True,
        related_name='calendars',
    )
    ...
    def calendar_method(self):
        return self.calendar_owners.calendar_owner_method()


class CalendarOwner(models.Model):
    ...
    def calendar_owner_method(self):
        ...
        # returns a bool, depends on condition

当我调用与它相关联Calendar.calendar_method()的(s) 时,为 each 调用它,并按预期工作 - 根据我在那里的任何逻辑,我得到一个布尔值。 我认为它的工作方式是从所有方法调用中,如果至少有一个执行中断并且返回值为. 否则它将调用所有相关对象并最终返回。CalendarCalendarOwnerCalendarOwner.calendar_owner_method()CalendarOwner
TrueTrue
False

问题:为什么当我打电话Calendar.calendar_method()时没有CalendarOwner(s)与之相关联Calendar时从不调用CalendarOwner.calendar_owner_method()并且总是返回True。这是默认行为吗?

例子:

>>> obj = Calendar()
<Calendar: Str>
>>> obj.calendar_owners.count()
0
>>> obj.calendar_owners.calendar_owner_method()
True

这是有道理的,因为没有CalendarOwner(s)与之相关联,Calendar根本CalendarOwners.calendar_owner_method()不会被调用。但为什么它返回 True 呢?有人可以指出我的文档吗?

我可以检查是否Calendar.calendar_owners.count()为零并返回False,但我想看看是否有更好的 Django 方法来做到这一点。

4

1 回答 1

0

obj.calendar_ownersManager而不是 的实例CalendarOwner,所以它不是calendar_owner_method

于 2018-09-06T08:31:14.217 回答