Как преобразовать функцию фильтрации JavaScript в Django Python?

У меня есть следующая функция фильтрации на JavaScript, и мне нужно сделать то же самое на Django.

Это моя функция JavaScript:

absentAttendees() {     
      return this.meeting.attendees.filter((element) => this.timeAttendees(element.user.id) <= 0 || (element.absent && this.timeAttendees(element.user.id) <= 0));
    }

timeAttendees(user) {
      let timeUser = 0
      this.meeting.meeting_times.forEach((time) => {
        if (time.user.id === user) {
          timeUser = timeUser + time.time
        }
      })

      return timeUser
    }

Вот что у меня есть на данный момент на Django, но он говорит мне, что объект, который я передаю, не имеет атрибута 'user'

timeList = filter(timeAttendees, meeting.attendees.all())
def timeAttendees(item):
            timeUser = 0
            
            for time in time_list:
                if(time.user.id == item.user.id):
                    timeUser = timeUser + time.time
                
            return timeUser

meeting.attendees относится к следующей модели:

meeting = models.ForeignKey(
Meeting, related_name="attendees", on_delete=models.CASCADE
)
user = models.ForeignKey(
    User, related_name="attendee", on_delete=models.CASCADE, null=True, blank=True
)
idd = models.CharField(max_length=255)
organizer = models.BooleanField(default=False)
absent = models.BooleanField(default=True)
verified = models.BooleanField(default=False)

Предполагая, что meeting является некоторым объектом Meeting, а item является действительным объектом, вот как можно воспроизвести функцию timeAttendees:

meeting = <Meeting_object>
def get_time_attendees(item):
    global meeting
    return sum([interval.time for interval in meeting.meeting_times
                if interval.user.id == item.user.id])
Функция

Выше возвращает общее время, которое пользователь появился в meeting_times. Чтобы получить отсутствующих посетителей, filter() и map() могут справиться с этой задачей:

def get_absent_attendees(meeting):
    attendees = meeting.attendees.all()
    return list(filter(lambda x: x <= 0, list(map(get_time_attendees, attendees))))

list(map(get_time_attendees, attendees)) вызывает функцию get_time_attendees в каждом объекте attendees и преобразует результат в список. Затем с помощью filter выхватываются те, у которых время присутствия меньше нуля.

Вернуться на верх