Vu le code suivant:Obtenez premier objet de Django QuerySet
randomItemQS = Item.objects.filter().exclude(id__in=[o.id for o in collection]).order_by('?')
randomItem = randomItemQS[:1]
calculation = randomItem.method()/constant
Comment puis-je faire en sorte que randomItem
est un Item
et non un QuerySet?
Si je cours le code de manage.py shell
, alors j'obtiens le résultat attendu. Toutefois, l'exécution de ce code à partir d'une vue entraîne l'attribut AttributeError 'QuerySet' object has no attribute 'method'
et indique que l'erreur se produit sur la dernière ligne.
Qu'est-ce qui me manque?
EDIT: Désolé, je devrais être plus précis - J'ai cela fonctionne très bien dans le shell, mais cela ne fonctionne pas dans la vue. Qu'est-ce qui serait différent?
'randomItemQS [0]' – catherine
Voir la réponse de Pavel ci-dessous. –
Non lié, mais si 'collection' est lui-même un jeu de requête, vous devez simplement faire' exclure (id__in = collection) ', qui utilise une sous-requête et supprime le besoin d'évaluer la collection séparément. –