2017-03-21 2 views
0

Disons que j'ai modèle suivant:Django: Appel delete() méthode uniquement() soulever exception DoesNotExist

class Student(models.Model): 
    name = models.CharField(max_length = 100) 
    ... 

Quand je suis en train d'appeler supprimer() méthode sur seulement() comme :

Student.object.filter(pk__in=[1, 5, 6]).only('id', 'name').delete() 

Je reçois l'erreur suivante:

DoesNotExist: Student matching query does not exist 

Ma question est: ne pouvons-nous pas appeler delete() sur only()?

Note: Nous n'utilisons que() sur la méthode get_queryset() de l'administrateur Django pour de meilleures performances.

Pour votre information, mon admin ressemble:

class StudentAdmin(admin.ModelAdmin): 
    def get_queryset(self, request): 
     qs = super(StudentAdmin, self).get_queryset(request) 
     return qs.only('id', 'name', ...) 

Lorsque nous essayons de supprimer des objets de Admin, nous obtenons cette erreur.

+0

Quel est le principal domaine pour le modèle? Django utilise la clé primaire pour interagir avec les objets. Vous pourriez ne pas l'inclure dans 'only()' –

+0

DoesNotExists n'est levé que dans 'Model.objects.get()'. Donc, si vous aviez écrit le même code avec plus tôt, votre serveur a-t-il été redémarré? si le problème persiste après le redémarrage, supprimez tous les fichiers * .pyc. J'ai essayé de supprimer avec seulement et cela a bien fonctionné pour moi. Malheureusement, je ne peux pas le poster ici pour vous. –

+0

@ThulasiRam, je pense, vous avez mal compris la question. Je parlais de la méthode [only()] (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#only) –

Répondre

0

Vous semblez avoir fait une erreur. Changer

qs = super(ShipmentAdmin, self).get_queryset(request) 

à

qs = super(StudentAdmin, self).get_queryset(request) 
+0

par erreur a écrit ShipmentAdmin ici. En code réel, c'est correct. Modifier la question –