Django 1.9、Python 3.6、postgres 数据库
存在Calendar
和CalendarOwner
,其中多对多关系在 中定义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 调用它,并按预期工作 - 根据我在那里的任何逻辑,我得到一个布尔值。
我认为它的工作方式是从所有方法调用中,如果至少有一个执行中断并且返回值为. 否则它将调用所有相关对象并最终返回。Calendar
CalendarOwner
CalendarOwner.calendar_owner_method()
CalendarOwner
True
True
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 方法来做到这一点。