AttributeError: ‘QuerySet’ oggetto non ha alcun attributo

Qualcuno può spiegare di cosa sto vedendo l’output della shell di seguito, si prega di:

import test/models.py

biz_area = BusinessArea.objects.filter(business_area_manager=user)

dprint(biz_area)
[{'_state': <django.db.models.base.ModelState object at 0x3726890>,
'business_area_id': Decimal('42'),
'business_area_manager': Decimal('999'),
'business_area_name': u'group 1',
'inactive': u'N'}]

biz_area.business_area_id

Traceback (most recent call last):
File "<<console>console>", line 1, in <<module>module>
AttributeError: 'QuerySet' object has no attribute 'business_area_id'

Così, python sta dicendo che il biz_area queryset non ha ‘business_area_id’ attributo, quando la bella stampato elenco dell’oggetto indica che non si dispone di tale attributo. E ‘possibile che qualcuno mi ha messo sulla strada giusta, poiché questa è confondere me un po’…

  • Che cosa circa biz_area['business_area_id']?
  • che non avrebbe funzionato come biz_area è una raccolta di oggetti
  • Hai ragione, naturalmente. Io avrei usato altri miei occhiali per guardare la questione …
InformationsquelleAutor d_w_r | 2013-03-20



4 Replies
  1. 4

    biz_area è QuerySet oggetto. Questa è una raccolta, non di un singolo oggetto.

    [{'_state': <django.db.models.base.ModelState object at 0x3726890>,
    'business_area_id': Decimal('42'),
    'business_area_manager': Decimal('999'),
    'business_area_name': u'group 1',
    'inactive': u'N'}]

    Le parentesi quadre ([]) indicano una collezione. Si potrebbe pensare a questo in termini di python elenco

    Ci sono un paio di modi per gestire questo:

    filtro restituisce sempre la collezione di oggetti

    biz_areas = BusinessArea.objects.filter(business_area_manager=user)
    for biz_area in biz_areas:
      biz_area.business_area_id

    Se BusinessArea sarà mai un socio user

    biz_area = BusinessArea.objects.get(business_area_manager=user)
    biz_are.business_area_id

    leggere la documentazione in materia di get solleverà eccezioni, se ci sono più oggetti, o 0 oggetti che corrispondono alla tua richiesta

  2. 0

    Sbagliato, la bella stampa di biz_area non vedi che ha business_area_id attributo e sarebbe strano se fosse, come il queryset è una collezione di oggetti (visibile come un elenco in una bella stampa se non è un elenco, in realtà) e business_area_id è un attributo di un oggetto singolo.

  3. 0

    biz_area è Queryset oggetto, significa che è una collezione di oggetti.
    Loop su biz_area per ottenere business_area_id.

    for i in biz_area:
      i.business_area_id
  4. -1

    se si digita

    type(biz_area)

    vedrai che è un tipo di elenco, non un oggetto da un queryset. Devi scorrere tutti gli elementi nella vostra biz_area variabile e stamparle.

    Se si recuperato un singolo oggetto si può poi accedere alla sua business_area_id attributo come avete fatto.

    • biz_area è un django.db.modelli.query.QuerySet

Lascia un commento