Django 1.9,Python 3.6,postgres DB
存在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()
相关联的Calendar
呼叫CalendarOwner
时,每个CalendarOwner.calendar_owner_method()
都会被调用CalendarOwner
,并且意图-根据那里的逻辑,我得到一个布尔值。
我认为它的工作方式是从所有方法调用中,如果至少有一个True
,则执行中断,返回值为True
。
否则它将调用所有相关对象,最后返回False
。
问题:
为什么当我在没有Calendar.calendar_method()
与CalendarOwner
相关联的情况下调用Calendar
时却从不调用CalendarOwner.calendar_owner_method()
并始终返回True
。
这是默认行为吗?
示例:
>>> obj = Calendar()
<Calendar: Str>
>>> obj.calendar_owners.count()
0
>>> obj.calendar_owners.calendar_owner_method()
True
有意义的是,由于没有CalendarOwner
与该Calendar
相关联,因此CalendarOwners.calendar_owner_method()
根本不会被调用。但是为什么它返回True?有人可以指出我的文档吗?
我可以检查Calendar.calendar_owners.count()
是否为零并返回False
,但我想看看是否有更好的Django方式。