Как преобразовать функцию фильтрации 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
выхватываются те, у которых время присутствия меньше нуля.