Nano Hash - криптовалюты, майнинг, программирование

Как отфильтровать набор запросов на основе метода модели?

У меня есть этот запрос:

plist = UserProfile.objects.filter(q).order_by('-created_at')

Модель:

class UserProfile(models.Model):
    user =  models.OneToOneField(User)
    name = models.CharField(max_length=30, blank=True)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    #some more fields


    def last_seen(self):
        return cache.get('seen_%s' % self.user.username)


    def online(self):
        if self.last_seen():
            now = datetime.datetime.now()
            if now > self.last_seen() + datetime.timedelta(
                         seconds=settings.USER_ONLINE_TIMEOUT):
                return False
            else:
                return True

Чего я хочу добиться, так это отфильтровать дополнительные plist, чтобы содержать только онлайн-пользователей.

Я пробовал разные трюки, например:

for p in plist:
    if p.online:
        print 'profile onlnine \n', p.id
        online_plist.append(p)
plist = online_plist

Но это не работает. Так что оцените ваши намеки.

ОБНОВЛЕНИЕ: вот как устанавливается кеш онлайн-пользователей:

class ActiveUserMiddleware:

    def process_request(self, request):
        current_user = request.user
        if request.user.is_authenticated():
            now = datetime.datetime.now()
            cache.set('seen_%s' % (current_user.username), now, 
                           settings.USER_LASTSEEN_TIMEOUT)
01.10.2017

  • Вам нужно фактически вызвать метод online() в вашем операторе if. 01.10.2017
  • @DanielRoseman не уверен, как это сделать. Когда я вместо этого использую if p.online(), я получаю User matching query does not exist.. Не могли бы вы уточнить свой ответ с образцом кода? 01.10.2017
  • Это это то, что вы делаете. Эта ошибка предположительно вызвана чем-то в вашем методе last_seen(), который вы не показали. 01.10.2017
  • извините, я добавил метод last_seen(). Весь онлайн-код взят из этого ответа: stackoverflow.com/a/32162699/4151875 01.10.2017
  • @DanielRoseman, пожалуйста, помогите! 01.10.2017
  • Я не уверен, в чем вам нужна помощь. Сообщение об ошибке говорит вам, что не так: (по крайней мере) один конкретный UserProfile не имеет связанного пользователя. 01.10.2017
  • На самом деле я не могу получить результаты даже для if not p.online(): , пока много офлайн-пользователей. Трек ошибки сводится к return cache.get('seen_%s' % self.user.username) 01.10.2017
  • Я не понимаю актуальности этого комментария. 01.10.2017
  • Забудь про это. Выяснилось, что были профили-сироты, так что user.username не удовлетворил. Я поместил метод online в блок try..catch, и проблема исчезла. Вы отличный наставник, Дэвид Роузман. Не мог поверить, что ты помогаешь людям и по воскресеньям. Большое спасибо! 01.10.2017

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..