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
(s), 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
Имеет смысл, что, поскольку с этим Calendar
не связаны CalendarOwner
, CalendarOwners.calendar_owner_method()
вообще не будет вызываться. Но почему он возвращает True? Может кто-нибудь указать мне на документы?
Я могу проверить, равен ли Calendar.calendar_owners.count()
ноль, и вернуть False
, но я хочу посмотреть, есть ли лучший способ сделать это в Django.