related_name
Вам нужен аргумент related_name
в ForeignKey
. Он работает следующим образом:
store = models.ForeignKey(Store, on_delete=models.SET_NULL, null=True, related_name="turns")
Это означает, что теперь вы можете получить доступ ко всем ходам конкретного магазина следующим образом:
store = Store.objects.get(id=1) # get a store
turns = store.turns
turns
в приведенном выше будет набором запросов из Turn
объектов.
Также обратите внимание, что если вы не укажете related_name
django фактически создаст его автоматически, добавив _set
в конец имени связанной модели в нижнем регистре, и вы можете сделать то же самое со следующим:
turns = store.turn_set
Но, вероятно, лучше явно указать related_name
.
Ваш конкретный случай
class Store(models.Model):
...
@property
def average_wait_time(self):
turns = self.turns
total_time = sum([turn.completion_time - turn.creation_time for turn in turns.all()])
average_time = total_time / turns.count()
return average_time
Вы также можете сделать это, используя aggregate
и Avg
, но приведенное выше, вероятно, подходит.