2014-09-02 12 views
9

Viene visualizzato il seguente errore L'oggetto 'dict' non ha attributo 'user_id' ma non sono sicuro di aver compreso l'errore. Poiché user_id è disponibile dal queryset.L'oggetto "Dict" di Django non ha attributo "user_id"

errore si verifica durante l'ultima riga di codice

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) 

risposta

23

The .values() method on querysets returns a queryset that returns dictionaries instead of model objects when you iterate over it - così user_who_played è un dict, il che significa che si dovrebbe accedere all'ID utente scrivendo user_who_played['user_id'] invece di usare la sintassi dell'attributo dot.

Se si desidera recuperare solo determinati campi dal database ma si desidera comunque gestire gli oggetti del modello, un'alternativa è utilizzare the .only() method anziché .values().

+0

Eccellente, ho appena imparato qualcosa di nuovo. – Yannick

Problemi correlati