2014-09-02 2 views
9

Я получаю следующую ошибку: 'dict' объект не имеет атрибута 'user_id', но не уверен, что я понимаю ошибку. Поскольку user_id доступен из набора запросов.Объект Django 'dict' не имеет атрибута 'user_id'

ошибка происходит в последней строке кода

users_who_played = UserEvent.objects\ 
      .values('user_id')\ 
      .annotate(total_season_points=Sum('points'))\ 
      .filter(event__season_id=season.id)\ 
      .order_by('-total_season_points')\ 

    for i, user_who_played in enumerate(users_who_played): 

     try: 
      user = UserSeason.objects. 
        get(user=user_who_played.user_id, season=season.id) 

ответ

23

The .values() method on querysets returns a queryset that returns dictionaries instead of model objects when you iterate over it - так user_who_played является ДИКТ, что означает, что вы должны получить доступ к идентификатор пользователя, написав user_who_played['user_id'] вместо того, чтобы использовать точечный синтаксис атрибута.

Если вы хотите получить только определенные поля из базы данных, но все же хотите иметь дело с объектами модели, альтернативой является использование the .only() method вместо .values().

+0

Отлично только что узнал что-то новое. – Yannick

Смежные вопросы